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。
- 创建 Rails 4 个应用程序
- 升级 gemfile 以使用 rails 5
- 尝试添加滚动条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
变量
希望对您有所帮助
升级到rails 5后无法使用rspec和rollbar。
- 创建 Rails 4 个应用程序
- 升级 gemfile 以使用 rails 5
- 尝试添加滚动条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
.
模块影响不大。我能找到的唯一区别是,在打印您的应用程序时,它现在显示为(这就是我们找到修复程序与新工作应用程序的方式):
<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
变量
希望对您有所帮助