未定义的方法`halt_callback_chains_on_return_false =

问题描述 投票:2回答:3

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

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

ActiveSupport.halt_callback_chains_on_return_false = false

此方法调用会引发undefined_method错误。这段代码需要做什么?

这是堆栈跟踪:

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)

提前致谢。

ruby-on-rails ruby ruby-on-rails-5
3个回答
4
投票

我在上次从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从ActiveSupport中删除的。


1
投票

这是以前的行为:

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

希望这可以帮助。

最好,埃米尔


0
投票
  halt_callback_chains_on_return_false setting in the initializer 

这是在升级到Rails 5.0之后临时保留旧回调行为的解决方案。假设您需要时间检查应用程序中的所有回调,之后您可以删除此设置。并且假设在升级到5.2时已经检查了所有内容,因此删除了此设置。

只需在config / initializers / new_framework_defaults.rb文件中注释掉@worrawut建议的行。

© www.soinside.com 2019 - 2024. All rights reserved.