RuntimeError:无法修改冻结的数组(Rollbar,Rails 5.1升级)

时间:2018-04-05 19:27:10

标签: ruby-on-rails rollbar

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

  1. 创建Rails 4应用
  2. 升级gemfile以使用rails 5
  3. 尝试添加rollbar gem / support
  4. 标准配置/ 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.
    

3 个答案:

答案 0 :(得分:4)

在大多数情况下,这个错误是其他东西的红色鲱鱼。

遇到问题时,请不要使用重复出现的can't modify frozen Array错误消息,而是检查运行规范时出现的第一个错误。

例如:

  

失败/错误:验证:唯一性,如果:&#39; should_be_unique?&#39;

     

ArgumentError:传递要评估的字符串:if和:unless   不支持条件选项。传递实例的符号   相反,方法,或lambda,proc或block。

答案 1 :(得分:2)

只需在Maxximo Mussini的答案上方添加一个提示。

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

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

就我而言,我尚未更新.env模型所需的本地User变量

希望有帮助

答案 2 :(得分:-2)

调试此操作并不容易,但解决方案很简单:在config/application.rb中围绕应用类定义添加模块(&#34;命名空间&#34;您选择的)。< / p>

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

<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