RuntimeError: can't modify frozen Array (Rollbar, Rails 5.1 upgrade)

RuntimeError: can't modify frozen Array (Rollbar, Rails 5.1 upgrade)

升级到rails 5后无法使用rspec和rollbar。

  1. 创建 Rails 4 个应用程序
  2. 升级 gemfile 以使用 rails 5
  3. 尝试添加滚动条gem/support

标准 config/environment.rb:

 # Load the Rails application.
require_relative 'application'

# Initialize the Rails application.
Rails.application.initialize!

当 运行 rspec 时出错:

An error occurred while loading {path to specific spec file}
Failure/Error: require File.expand_path('../../config/environment', __FILE__)

RuntimeError:
  can't modify frozen Array
# ./config/environment.rb:6:in `<top (required)>'
# ./spec/rails_helper.rb:5:in `<top (required)>'
...
No examples found.

调试这并不容易,但一种可能的解决方案很简单。这可能是与 Rollbar 的命名冲突,可能是 monkey-patched。如果您看到此 RuntimeError 但未使用 Rollbar,请参阅其他答案。

config/application.rb.

中围绕您的应用程序 class 定义添加 模块("namespace" 您的选择)

模块影响不大。我能找到的唯一区别是,在打印您的应用程序时,它现在显示为(这就是我们找到修复程序与新工作应用程序的方式):

<MyTestAPP::Application ...> 而不是 <Application ...>

变化:

class Application < Rails::Application
    # Initialize configuration defaults for originally generated Rails version.
    config.load_defaults 5.1
  end

收件人:

Module MyTestApp
  class Application < Rails::Application
    # Initialize configuration defaults for originally generated Rails version.
    config.load_defaults 5.1
  end
end

在大多数情况下,该错误是其他问题的转移注意力。

遇到它时,不要被反复出现的 can't modify frozen Array 错误消息所淹没,而是检查 运行 规格时出现的第一个错误。

例如:

Failure/Error: validate :uniqueness, if: 'should_be_unique?'

ArgumentError: Passing string to be evaluated in :if and :unless conditional options is not supported. Pass a symbol for an instance method, or a lambda, proc or block, instead.

只是在 Maxximo Mussini 的回答之上添加一个提示。

如果有人在终端上找不到第一个错误,请尝试在一个文件上运行 RSpec,即rspec spec/models/user_spec.rb

您应该能够找到根本原因。

就我而言,我还没有更新 User 模型

所需的本地 .env 变量

希望对您有所帮助