代码之家  ›  专栏  ›  技术社区  ›  Cannon Moyer

未定义方法'halt_callback_chains_on_return_false=

  •  2
  • Cannon Moyer  · 技术社区  · 6 年前

    我正在将rails 5.1应用程序升级到5.2。我已经更新了所有的gems,包括rails,最后运行 rails app:update 它为我的rails应用程序创建了新文件。

    具体来说,有两个文件是我创建的。首先在 config/initializers 有一个 new_framework_defaults_5_2.rb 文件和第二个(在同一目录中)a new_framework_defaults.rb . 第一个文件只包含注释,但第二个文件包含一些新的配置选项。其中一个选择是:

    ActiveSupport.halt_callback_chains_on_return_false = false
    

    此方法调用引发未定义的方法错误。我需要对这行代码做些什么?

    这是StackTrace:

    Traceback (most recent call last):
        73: from bin/rails:4:in `<main>'
        72: from /usr/local/rvm/gems/ruby-2.5.1/gems/activesupport-5.2.0/lib/active_support/dependencies.rb:283:in `require'
        71: from /usr/local/rvm/gems/ruby-2.5.1/gems/activesupport-5.2.0/lib/active_support/dependencies.rb:249:in `load_dependency'
        70: from /usr/local/rvm/gems/ruby-2.5.1/gems/activesupport-5.2.0/lib/active_support/dependencies.rb:283:in `block in require'
        69: from /usr/local/rvm/gems/ruby-2.5.1/gems/bootsnap-1.3.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:29:in `require'
        68: from /usr/local/rvm/gems/ruby-2.5.1/gems/bootsnap-1.3.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:20:in `require_with_bootsnap_lfi'
        67: from /usr/local/rvm/gems/ruby-2.5.1/gems/bootsnap-1.3.0/lib/bootsnap/load_path_cache/loaded_features_index.rb:65:in `register'
        66: from /usr/local/rvm/gems/ruby-2.5.1/gems/bootsnap-1.3.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `block in require_with_bootsnap_lfi'
        65: from /usr/local/rvm/gems/ruby-2.5.1/gems/bootsnap-1.3.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require'
        64: from /usr/local/rvm/gems/ruby-2.5.1/gems/railties-5.2.0/lib/rails/commands.rb:18:in `<main>'
        63: from /usr/local/rvm/gems/ruby-2.5.1/gems/railties-5.2.0/lib/rails/command.rb:46:in `invoke'
        62: from /usr/local/rvm/gems/ruby-2.5.1/gems/railties-5.2.0/lib/rails/command/base.rb:65:in `perform'
        61: from /usr/local/rvm/gems/ruby-2.5.1/gems/thor-0.20.0/lib/thor.rb:387:in `dispatch'
        60: from /usr/local/rvm/gems/ruby-2.5.1/gems/thor-0.20.0/lib/thor/invocation.rb:126:in `invoke_command'
        59: from /usr/local/rvm/gems/ruby-2.5.1/gems/thor-0.20.0/lib/thor/command.rb:27:in `run'
        58: from /usr/local/rvm/gems/ruby-2.5.1/gems/railties-5.2.0/lib/rails/commands/server/server_command.rb:142:in `perform'
        57: from /usr/local/rvm/gems/ruby-2.5.1/gems/railties-5.2.0/lib/rails/commands/server/server_command.rb:142:in `tap'
        56: from /usr/local/rvm/gems/ruby-2.5.1/gems/railties-5.2.0/lib/rails/commands/server/server_command.rb:147:in `block in perform'
        55: from /usr/local/rvm/gems/ruby-2.5.1/gems/railties-5.2.0/lib/rails/commands/server/server_command.rb:51:in `start'
        54: from /usr/local/rvm/gems/ruby-2.5.1/gems/railties-5.2.0/lib/rails/commands/server/server_command.rb:89:in `log_to_stdout'
        53: from /usr/local/rvm/gems/ruby-2.5.1/gems/rack-2.0.5/lib/rack/server.rb:354:in `wrapped_app'
        52: from /usr/local/rvm/gems/ruby-2.5.1/gems/railties-5.2.0/lib/rails/commands/server/server_command.rb:27:in `app'
        51: from /usr/local/rvm/gems/ruby-2.5.1/gems/rack-2.0.5/lib/rack/server.rb:219:in `app'
        50: from /usr/local/rvm/gems/ruby-2.5.1/gems/rack-2.0.5/lib/rack/server.rb:319:in `build_app_and_options_from_config'
        49: from /usr/local/rvm/gems/ruby-2.5.1/gems/rack-2.0.5/lib/rack/builder.rb:40:in `parse_file'
        48: from /usr/local/rvm/gems/ruby-2.5.1/gems/rack-2.0.5/lib/rack/builder.rb:49:in `new_from_string'
        47: from /usr/local/rvm/gems/ruby-2.5.1/gems/rack-2.0.5/lib/rack/builder.rb:49:in `eval'
        46: from config.ru:in `<main>'
        45: from config.ru:in `new'
        44: from /usr/local/rvm/gems/ruby-2.5.1/gems/rack-2.0.5/lib/rack/builder.rb:55:in `initialize'
        43: from /usr/local/rvm/gems/ruby-2.5.1/gems/rack-2.0.5/lib/rack/builder.rb:55:in `instance_eval'
        42: from config.ru:3:in `block in <main>'
        41: from /usr/local/rvm/gems/ruby-2.5.1/gems/bootsnap-1.3.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:44:in `require_relative'
        40: from /usr/local/rvm/gems/ruby-2.5.1/gems/activesupport-5.2.0/lib/active_support/dependencies.rb:283:in `require'
        39: from /usr/local/rvm/gems/ruby-2.5.1/gems/activesupport-5.2.0/lib/active_support/dependencies.rb:249:in `load_dependency'
        38: from /usr/local/rvm/gems/ruby-2.5.1/gems/activesupport-5.2.0/lib/active_support/dependencies.rb:283:in `block in require'
        37: from /usr/local/rvm/gems/ruby-2.5.1/gems/bootsnap-1.3.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:29:in `require'
        36: from /usr/local/rvm/gems/ruby-2.5.1/gems/bootsnap-1.3.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:20:in `require_with_bootsnap_lfi'
        35: from /usr/local/rvm/gems/ruby-2.5.1/gems/bootsnap-1.3.0/lib/bootsnap/load_path_cache/loaded_features_index.rb:65:in `register'
        34: from /usr/local/rvm/gems/ruby-2.5.1/gems/bootsnap-1.3.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `block in require_with_bootsnap_lfi'
        33: from /usr/local/rvm/gems/ruby-2.5.1/gems/bootsnap-1.3.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require'
        32: from /home/www-upload/treadmilldoctorcurrent/config/environment.rb:5:in `<main>'
        31: from /usr/local/rvm/gems/ruby-2.5.1/gems/railties-5.2.0/lib/rails/application.rb:361:in `initialize!'
        30: from /usr/local/rvm/gems/ruby-2.5.1/gems/railties-5.2.0/lib/rails/initializable.rb:60:in `run_initializers'
        29: from /usr/local/rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/tsort.rb:205:in `tsort_each'
        28: from /usr/local/rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/tsort.rb:226:in `tsort_each'
        27: from /usr/local/rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/tsort.rb:347:in `each_strongly_connected_component'
        26: from /usr/local/rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/tsort.rb:347:in `call'
        25: from /usr/local/rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/tsort.rb:347:in `each'
        24: from /usr/local/rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/tsort.rb:349:in `block in each_strongly_connected_component'
        23: from /usr/local/rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/tsort.rb:415:in `each_strongly_connected_component_from'
        22: from /usr/local/rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/tsort.rb:415:in `call'
        21: from /usr/local/rvm/gems/ruby-2.5.1/gems/railties-5.2.0/lib/rails/initializable.rb:50:in `tsort_each_child'
        20: from /usr/local/rvm/gems/ruby-2.5.1/gems/railties-5.2.0/lib/rails/initializable.rb:50:in `each'
        19: from /usr/local/rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/tsort.rb:421:in `block in each_strongly_connected_component_from'
        18: from /usr/local/rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/tsort.rb:431:in `each_strongly_connected_component_from'
        17: from /usr/local/rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/tsort.rb:422:in `block (2 levels) in each_strongly_connected_component_from'
        16: from /usr/local/rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/tsort.rb:350:in `block (2 levels) in each_strongly_connected_component'
        15: from /usr/local/rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/tsort.rb:228:in `block in tsort_each'
        14: from /usr/local/rvm/gems/ruby-2.5.1/gems/railties-5.2.0/lib/rails/initializable.rb:61:in `block in run_initializers'
        13: from /usr/local/rvm/gems/ruby-2.5.1/gems/railties-5.2.0/lib/rails/initializable.rb:32:in `run'
        12: from /usr/local/rvm/gems/ruby-2.5.1/gems/railties-5.2.0/lib/rails/initializable.rb:32:in `instance_exec'
        11: from /usr/local/rvm/gems/ruby-2.5.1/gems/railties-5.2.0/lib/rails/engine.rb:613:in `block in <class:Engine>'
        10: from /usr/local/rvm/gems/ruby-2.5.1/gems/railties-5.2.0/lib/rails/engine.rb:613:in `each'
         9: from /usr/local/rvm/gems/ruby-2.5.1/gems/railties-5.2.0/lib/rails/engine.rb:614:in `block (2 levels) in <class:Engine>'
         8: from /usr/local/rvm/gems/ruby-2.5.1/gems/railties-5.2.0/lib/rails/engine.rb:656:in `load_config_initializer'
         7: from /usr/local/rvm/gems/ruby-2.5.1/gems/activesupport-5.2.0/lib/active_support/notifications.rb:170:in `instrument'
         6: from /usr/local/rvm/gems/ruby-2.5.1/gems/railties-5.2.0/lib/rails/engine.rb:657:in `block in load_config_initializer'
         5: from /usr/local/rvm/gems/ruby-2.5.1/gems/activesupport-5.2.0/lib/active_support/dependencies.rb:277:in `load'
         4: from /usr/local/rvm/gems/ruby-2.5.1/gems/activesupport-5.2.0/lib/active_support/dependencies.rb:249:in `load_dependency'
         3: from /usr/local/rvm/gems/ruby-2.5.1/gems/activesupport-5.2.0/lib/active_support/dependencies.rb:277:in `block in load'
         2: from /usr/local/rvm/gems/ruby-2.5.1/gems/bootsnap-1.3.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:50:in `load'
         1: from /usr/local/rvm/gems/ruby-2.5.1/gems/bootsnap-1.3.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:50:in `load'
    /home/www-upload/treadmilldoctorcurrent/config/initializers/new_framework_defaults.rb:21:in `<main>': undefined method `halt_callback_chains_on_return_false=' for 
    ActiveSupport:Module (NoMethodError)
    

    提前谢谢。

    3 回复  |  直到 6 年前
        1
  •  4
  •   worrawut    6 年前

    上次从5.1升级到5.2时,我遇到了同样的问题。 我所做的只是在 config/initializers/new_framework_defaults.rb

    # Do not halt callback chains when a callback returns false. Previous versions had true.
    # ActiveSupport.halt_callback_chains_on_return_false = false
    

    我想引起这个错误的原因是 halt_callback_chains_on_return_false 选项实际上是根据 this release note .

        2
  •  1
  •   ekampp    6 年前

    这是以前的行为:

    WelcomeController < ApplicationController
      before_action: -> { return false }
    
      def index
        # would not be called
      end
    end
    

    什么 halt_callback_chains_on_return_false = false 做:

    WelcomeController < ApplicationController
      before_action: -> { return false }
    
      def index
        # would now be rendered regardless of the before_action filter chain's return value
      end
    end
    

    rails认为应该在过滤器链中做什么来防止渲染:

    WelcomeController < ApplicationController
      before_action: -> { raise 'Error' }
    
      def index
        # would not be rendered
      end
    end
    

    希望这有帮助。

    最好的, 埃米尔

        3
  •  0
  •   Sawo Cliff    6 年前
      halt_callback_chains_on_return_false setting in the initializer 
    

    这是一个在升级到rails 5.0之后临时保留旧回调行为的解决方案。假设您需要时间检查应用程序中的所有回调,然后您可以删除此设置。并假定升级到5.2时已选中“全部”,因此将删除此设置。

    只要按照@worrawut在 config/initializers/new_framework_defaults.rb文件。