【问题标题】:Immediately after installing Webpacker in Rails 5.2.1, I get a `can't modify frozen Array` error在 Rails 5.2.1 中安装 Webpacker 后,立即出现“无法修改冻结数组”错误
【发布时间】:2018-08-25 22:37:00
【问题描述】:

我开始了一个新项目,并且或多或少是一名初级开发人员。一切都很顺利,用 Postgres 数据库设置 Rails,设置模型/控制器/视图以生成 Redcarpet Markdown,设置 Rspec/Capybara 测试等。

我最终得到了一个这样的 Gemfile:

source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

# Language version
ruby '2.5.1'

# Framework version
gem 'rails', '~> 5.2.1'

# Database
gem 'pg'

# Database administration
gem 'rails_admin', '~> 1.3'

# Styling
gem 'sass-rails', '~> 5.0'

# Scripting
gem 'uglifier', '>= 1.3.0'
gem 'mini_racer', platforms: :ruby
gem 'coffee-rails', '~> 4.2'
gem 'webpacker', '~> 3.5'

# Performance improvements
gem 'turbolinks', '~> 5'
gem 'bootsnap', '>= 1.1.0', require: false

# Markdown parsing
gem 'redcarpet'

# JSON API builder
gem 'jbuilder', '~> 2.5'

# Make it work on Windows
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

group :development, :test do
  # Call 'byebug' in the code to get a debugger console.
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]

  # Testing
  gem 'rspec-rails'
  gem 'factory_bot_rails'
end

group :development do
  # Call 'console' in the code to get a live console.
  gem 'web-console', '>= 3.3.0'
  gem 'listen', '>= 3.0.5', '< 3.2'

  # Performance improvements for development
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
end

group :test do
  # Testing
  gem 'capybara', '>= 2.15'
  gem 'selenium-webdriver'
end

并按照 Webpacker 文档安装 Webpack 以在我的项目中使用 ES6:

bundle
bundle exec rails webpacker:install

它安装得很好,但是现在当我尝试运行 bundle exec rails s 时,不更改任何其他文件,我得到一个很长的堆栈跟踪:

Traceback (most recent call last):
    69: from bin/rails:3:in `<main>'
    68: from bin/rails:3:in `load'
    67: from /Users/danrice/Software/Novum-Opus-Projects/Novum_Opus/bin/spring:15:in `<top (required)>'
    66: from /Users/danrice/Software/Novum-Opus-Projects/Novum_Opus/bin/spring:15:in `require'
    65: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/spring-2.0.2/lib/spring/binstub.rb:31:in `<top (required)>'
    64: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/spring-2.0.2/lib/spring/binstub.rb:31:in `load'
    63: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/spring-2.0.2/bin/spring:49:in `<top (required)>'
    62: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/spring-2.0.2/lib/spring/client.rb:30:in `run'
    61: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/spring-2.0.2/lib/spring/client/command.rb:7:in `call'
    60: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/spring-2.0.2/lib/spring/client/rails.rb:28:in `call'
    59: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/spring-2.0.2/lib/spring/client/rails.rb:28:in `load'
    58: from /Users/danrice/Software/Novum-Opus-Projects/Novum_Opus/bin/rails:9:in `<top (required)>'
    57: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/activesupport-5.2.1/lib/active_support/dependencies.rb:287:in `require'
    56: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/activesupport-5.2.1/lib/active_support/dependencies.rb:253:in `load_dependency'
    55: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/activesupport-5.2.1/lib/active_support/dependencies.rb:287:in `block in require'
    54: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/bootsnap-1.3.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:29:in `require'
    53: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/bootsnap-1.3.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:20:in `require_with_bootsnap_lfi'
    52: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/bootsnap-1.3.1/lib/bootsnap/load_path_cache/loaded_features_index.rb:65:in `register'
    51: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/bootsnap-1.3.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `block in require_with_bootsnap_lfi'
    50: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/bootsnap-1.3.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require'
    49: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/railties-5.2.1/lib/rails/commands.rb:18:in `<main>'
    48: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/railties-5.2.1/lib/rails/command.rb:46:in `invoke'
    47: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/railties-5.2.1/lib/rails/command/base.rb:65:in `perform'
    46: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/thor-0.20.0/lib/thor.rb:387:in `dispatch'
    45: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/thor-0.20.0/lib/thor/invocation.rb:126:in `invoke_command'
    44: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/thor-0.20.0/lib/thor/command.rb:27:in `run'
    43: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/railties-5.2.1/lib/rails/commands/server/server_command.rb:142:in `perform'
    42: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/railties-5.2.1/lib/rails/commands/server/server_command.rb:142:in `tap'
    41: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/railties-5.2.1/lib/rails/commands/server/server_command.rb:147:in `block in perform'
    40: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/railties-5.2.1/lib/rails/commands/server/server_command.rb:51:in `start'
    39: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/railties-5.2.1/lib/rails/commands/server/server_command.rb:89:in `log_to_stdout'
    38: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/rack-2.0.5/lib/rack/server.rb:354:in `wrapped_app'
    37: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/railties-5.2.1/lib/rails/commands/server/server_command.rb:27:in `app'
    36: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/rack-2.0.5/lib/rack/server.rb:219:in `app'
    35: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/rack-2.0.5/lib/rack/server.rb:319:in `build_app_and_options_from_config'
    34: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/rack-2.0.5/lib/rack/builder.rb:40:in `parse_file'
    33: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/rack-2.0.5/lib/rack/builder.rb:49:in `new_from_string'
    32: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/rack-2.0.5/lib/rack/builder.rb:49:in `eval'
    31: from config.ru:in `<main>'
    30: from config.ru:in `new'
    29: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/rack-2.0.5/lib/rack/builder.rb:55:in `initialize'
    28: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/rack-2.0.5/lib/rack/builder.rb:55:in `instance_eval'
    27: from config.ru:3:in `block in <main>'
    26: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/bootsnap-1.3.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:44:in `require_relative'
    25: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/activesupport-5.2.1/lib/active_support/dependencies.rb:287:in `require'
    24: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/activesupport-5.2.1/lib/active_support/dependencies.rb:253:in `load_dependency'
    23: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/activesupport-5.2.1/lib/active_support/dependencies.rb:287:in `block in require'
    22: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/bootsnap-1.3.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:29:in `require'
    21: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/bootsnap-1.3.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:20:in `require_with_bootsnap_lfi'
    20: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/bootsnap-1.3.1/lib/bootsnap/load_path_cache/loaded_features_index.rb:65:in `register'
    19: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/bootsnap-1.3.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `block in require_with_bootsnap_lfi'
    18: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/bootsnap-1.3.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require'
    17: from /Users/danrice/Software/Novum-Opus-Projects/Novum_Opus/config/environment.rb:5:in `<main>'
    16: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/railties-5.2.1/lib/rails/application.rb:361:in `initialize!'
    15: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/railties-5.2.1/lib/rails/initializable.rb:60:in `run_initializers'
    14: from /Users/danrice/.rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/tsort.rb:205:in `tsort_each'
    13: from /Users/danrice/.rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/tsort.rb:226:in `tsort_each'
    12: from /Users/danrice/.rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/tsort.rb:347:in `each_strongly_connected_component'
    11: from /Users/danrice/.rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/tsort.rb:347:in `call'
    10: from /Users/danrice/.rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/tsort.rb:347:in `each'
     9: from /Users/danrice/.rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/tsort.rb:349:in `block in each_strongly_connected_component'
     8: from /Users/danrice/.rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/tsort.rb:431:in `each_strongly_connected_component_from'
     7: from /Users/danrice/.rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/tsort.rb:350:in `block (2 levels) in each_strongly_connected_component'
     6: from /Users/danrice/.rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/tsort.rb:228:in `block in tsort_each'
     5: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/railties-5.2.1/lib/rails/initializable.rb:61:in `block in run_initializers'
     4: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/railties-5.2.1/lib/rails/initializable.rb:32:in `run'
     3: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/railties-5.2.1/lib/rails/initializable.rb:32:in `instance_exec'
     2: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/webpacker-3.5.5/lib/webpacker/railtie.rb:51:in `block in <class:Engine>'
     1: from /Users/danrice/.rvm/gems/ruby-2.5.1/gems/actionpack-5.2.1/lib/action_dispatch/middleware/stack.rb:76:in `insert'
/Users/danrice/.rvm/gems/ruby-2.5.1/gems/actionpack-5.2.1/lib/action_dispatch/middleware/stack.rb:76:in `insert': can't modify frozen Array (FrozenError)

有人对世界上正在发生的事情有任何理论吗?非常感谢!

评论者要求提供我的config/environment.rb 文件,即:

# Load the Rails application.
require_relative 'application'

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

【问题讨论】:

  • 你能上传这个好吗config/environment.rb
  • 你做了什么 -> 17: from /Users/danrice/Software/Novum-Opus-Projects/Novum_Opus/config/environment.rb:5:in '&lt;main&gt;'
  • 当然。将其添加到上面的帖子中。

标签: ruby-on-rails webpack webpacker


【解决方案1】:

听起来这个项目非常新。我建议推出一个新的并从 Webpacker 开始,看看你是否有同样的问题。如果你不这样做,那么可能不是 Webpacker 导致了这个问题。

如果是这种情况,请注意提交您所做的每一项更改,尤其是任何 Gemfile、配置或初始化程序更改,这样您就可以轻松回滚到初始化问题发生之前并进行更好的调试。

我有时会成功停止 spring 服务器:

spring stop

在遇到这样的初始化问题时再次运行rails s。但如果这样可行,那么硬重启系统也会清除它。

【讨论】:

  • 我会试试spring stop。该项目是最近的项目,这是真的,所以我可能从一开始就使用 Webpacker 重新开始——我尝试将 Webpacker 放入全新的 Rails 5.2.1 安装中,并且它工作正常。我会留下这个问题,以防其他人遇到这个问题。感谢您的提示!
【解决方案2】:

看来问题可能出在 webpacker gem 中。请看github的PR:https://github.com/rails/webpacker/issues/1700

简而言之,人们会说在一些主要错误之后,二级队列中会出现错误,以防 webpacker 尝试添加 devServer 中间件。

在我的例子中,我只是从测试助手初始化中剔除明确需要 rails 环境文件。

【讨论】:

    猜你喜欢
    • 2019-05-10
    • 2021-02-19
    • 2014-02-26
    • 2022-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    • 1970-01-01
    相关资源
    最近更新 更多