Rails 服务器和 Rails 控制台崩溃: require': 无法加载此类文件 --rack/protection (LoadError)

hra*_*aud 5 ruby ruby-on-rails sinatra bundler

不确定为什么或如何发生这种情况,但突然间,在本地环境中运行良好的应用程序不再工作。

\n\n

我的本地开发环境是:\n MacOS Sierra 10.12.5

\n\n

应用程序使用:

\n\n
    \n
  • 导轨 5.2.2
  • \n
  • 红宝石2.5.0
  • \n
  • 雷本夫
  • \n
\n\n

每当我运行rails s或rails c时,应用程序都会启动并立即崩溃,并显示以下输出:

\n\n
\xe2\x9e\x9c  pwf-site git:(master) \xe2\x9c\x97 rails c\nTraceback (most recent call last):\n    67: from bin/rails:4:in `<main>\'\n    66: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/dependencies.rb:291:in `require\'\n    65: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/dependencies.rb:257:in `load_dependency\'\n    64: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/dependencies.rb:291:in `block in require\'\n    63: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/bootsnap-1.3.2/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:29:in `require\'\n    62: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/bootsnap-1.3.2/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:20:in `require_with_bootsnap_lfi\'\n    61: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/bootsnap-1.3.2/lib/bootsnap/load_path_cache/loaded_features_index.rb:65:in `register\'\n    60: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/bootsnap-1.3.2/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `block in require_with_bootsnap_lfi\'\n    59: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/bootsnap-1.3.2/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require\'\n    58: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/railties-5.2.2/lib/rails/commands.rb:18:in `<main>\'\n    57: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/railties-5.2.2/lib/rails/command.rb:46:in `invoke\'\n    56: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/railties-5.2.2/lib/rails/command/base.rb:65:in `perform\'\n    55: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/thor-0.20.3/lib/thor.rb:387:in `dispatch\'\n    54: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/thor-0.20.3/lib/thor/invocation.rb:126:in `invoke_command\'\n    53: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/thor-0.20.3/lib/thor/command.rb:27:in `run\'\n    52: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/railties-5.2.2/lib/rails/commands/console/console_command.rb:95:in `perform\'\n    51: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/railties-5.2.2/lib/rails/command/actions.rb:18:in `require_application_and_environment!\'\n    50: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/railties-5.2.2/lib/rails/application.rb:337:in `require_environment!\'\n    49: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/dependencies.rb:291:in `require\'\n    48: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/dependencies.rb:257:in `load_dependency\'\n    47: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/dependencies.rb:291:in `block in require\'\n    46: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/bootsnap-1.3.2/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:29:in `require\'\n    45: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/bootsnap-1.3.2/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:20:in `require_with_bootsnap_lfi\'\n    44: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/bootsnap-1.3.2/lib/bootsnap/load_path_cache/loaded_features_index.rb:65:in `register\'\n    43: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/bootsnap-1.3.2/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `block in require_with_bootsnap_lfi\'\n    42: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/bootsnap-1.3.2/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require\'\n    41: from /Users/herbyraynaud/code/personal/pwf-site/config/environment.rb:5:in `<main>\'\n    40: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/railties-5.2.2/lib/rails/application.rb:361:in `initialize!\'\n    39: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/railties-5.2.2/lib/rails/initializable.rb:60:in `run_initializers\'\n    38: from /Users/herbyraynaud/.rbenv/versions/2.5.0/lib/ruby/2.5.0/tsort.rb:205:in `tsort_each\'\n    37: from /Users/herbyraynaud/.rbenv/versions/2.5.0/lib/ruby/2.5.0/tsort.rb:226:in `tsort_each\'\n    36: from /Users/herbyraynaud/.rbenv/versions/2.5.0/lib/ruby/2.5.0/tsort.rb:347:in `each_strongly_connected_component\'\n    35: from /Users/herbyraynaud/.rbenv/versions/2.5.0/lib/ruby/2.5.0/tsort.rb:347:in `call\'\n    34: from /Users/herbyraynaud/.rbenv/versions/2.5.0/lib/ruby/2.5.0/tsort.rb:347:in `each\'\n    33: from /Users/herbyraynaud/.rbenv/versions/2.5.0/lib/ruby/2.5.0/tsort.rb:349:in `block in each_strongly_connected_component\'\n    32: from /Users/herbyraynaud/.rbenv/versions/2.5.0/lib/ruby/2.5.0/tsort.rb:431:in `each_strongly_connected_component_from\'\n    31: from /Users/herbyraynaud/.rbenv/versions/2.5.0/lib/ruby/2.5.0/tsort.rb:350:in `block (2 levels) in each_strongly_connected_component\'\n    30: from /Users/herbyraynaud/.rbenv/versions/2.5.0/lib/ruby/2.5.0/tsort.rb:228:in `block in tsort_each\'\n    29: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/railties-5.2.2/lib/rails/initializable.rb:61:in `block in run_initializers\'\n    28: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/railties-5.2.2/lib/rails/initializable.rb:32:in `run\'\n    27: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/railties-5.2.2/lib/rails/initializable.rb:32:in `instance_exec\'\n    26: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/railties-5.2.2/lib/rails/application/finisher.rb:130:in `block in <module:Finisher>\'\n    25: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/railties-5.2.2/lib/rails/application/routes_reloader.rb:10:in `execute\'\n    24: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/file_update_checker.rb:83:in `execute\'\n    23: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/railties-5.2.2/lib/rails/application/routes_reloader.rb:30:in `block in updater\'\n    22: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/railties-5.2.2/lib/rails/application/routes_reloader.rb:20:in `reload!\'\n    21: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/railties-5.2.2/lib/rails/application/routes_reloader.rb:41:in `load_paths\'\n    20: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/railties-5.2.2/lib/rails/application/routes_reloader.rb:41:in `each\'\n    19: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/railties-5.2.2/lib/rails/application/routes_reloader.rb:41:in `block in load_paths\'\n    18: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/dependencies.rb:285:in `load\'\n    17: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/dependencies.rb:257:in `load_dependency\'\n    16: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/dependencies.rb:285:in `block in load\'\n    15: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/bootsnap-1.3.2/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:50:in `load\'\n    14: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/bootsnap-1.3.2/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:50:in `load\'\n    13: from /Users/herbyraynaud/code/personal/pwf-site/config/routes.rb:1:in `<main>\'\n    12: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/dependencies.rb:291:in `require\'\n    11: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/dependencies.rb:257:in `load_dependency\'\n    10: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/dependencies.rb:291:in `block in require\'\n     9: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/bootsnap-1.3.2/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:29:in `require\'\n     8: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/bootsnap-1.3.2/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:20:in `require_with_bootsnap_lfi\'\n     7: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/bootsnap-1.3.2/lib/bootsnap/load_path_cache/loaded_features_index.rb:65:in `register\'\n     6: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/bootsnap-1.3.2/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `block in require_with_bootsnap_lfi\'\n     5: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/bootsnap-1.3.2/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require\'\n     4: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/sidekiq-5.2.5/lib/sidekiq/web.rb:13:in `<main>\'\n     3: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/dependencies.rb:291:in `require\'\n     2: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/dependencies.rb:257:in `load_dependency\'\n     1: from /Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/dependencies.rb:291:in `block in require\'\n/Users/herbyraynaud/code/personal/pwf-site/vendor/bundle/ruby/2.5.0/gems/bootsnap-1.3.2/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require\': cannot load such file -- rack/protection (LoadError)\n
Run Code Online (Sandbox Code Playgroud)\n\n

机架保护gem 是Sinatra的一部分,所以我尝试将sinatra添加到 Gemfile 以及进行正常的 gem 安装,但看起来这是一个转移注意力的事情。

\n\n

以下是我尝试过的各种组合和顺序,但没有任何效果

\n\n
    \n
  • 捆绑清洁--强制
  • \n
  • gem 卸载 --全部
  • \n
  • 宝石质朴——全部
  • \n
  • 删除我的应用程序供应商/捆绑目录
  • \n
  • 删除了我的应用程序/tmp目录
  • \n
  • 直接将 sinatra 添加到我的 gem 文件中
  • \n
  • gem 卸载 sinatra
  • \n
  • 宝石安装西纳特拉
  • \n
  • gem 安装机架保护
  • \n
  • 宝石更新--系统
  • \n
\n\n

有一些类似的问题表明问题出在 bootsnap gem 上,但事实证明它们是为了转移注意力,删除 gem 并在 boot.rb 文件中禁用 bootsnap 并不能解决问题。

\n\n

最后,除了修复 sqlite3 版本问题之外,我还能够创建一个新的 Rails 应用程序,我能够毫无问题地运行服务器和控制台。

\n\n

这让我相信问题一定是一些 gem 依赖关系搞砸了导致了问题。

\n\n

这真是一个令人头疼的问题。

\n\n

这是我的 Gemfile

\n\n
source \'https://rubygems.org\'\nruby "2.5.0"\n\ngem \'rails\', \'5.2.2\'\ngem \'bootsnap\'\ngem \'devise\'\ngem "simple_form"\ngem \'simple_enum\', git: \'git://github.com/lwe/simple_enum.git\'\ngem \'kaminari\'\ngem \'activerecord-import\'\ngem \'font-awesome-sass\', \'~> 5.2.0\'\ngem \'pg\'\ngem \'puma\', \'~> 3.7\'\ngem \'activeadmin\'\ngem \'activeadmin_blaze_theme\'\ngem \'inherited_resources\'\ngem \'stripe\'\ngem "aws-sdk-s3",  require: false\ngem "image_processing", "~> 1.2"\ngem "prawn"#, :git => "git://github.com/prawnpdf/prawn.git"\ngem \'prawn-table\' #, \'~> 0.1.0\'\ngem "bootstrap", ">= 4.3.1"\ngem \'jquery-rails\'\ngem "chosen-rails"\ngem \'rails-observers\'\ngem \'combine_pdf\'\ngem \'figaro\'\ngem \'exception_handler\'\ngem "chartkick"\ngem \'activeadmin_medium_editor\', git: "git://github.com/hraynaud/activeadmin_medium_editor.git"\ngem \'sidekiq\'\n\ngroup :development, :test do\n  gem "better_errors"\n  gem "hirb"\n  gem \'rspec\'\n  gem "rspec-rails"\n  gem \'factory_bot\' \n  gem "factory_bot_rails"\n  gem "faker"\n  gem "populator"\n  gem "pry"\n  gem "pry-nav"\n  gem "fakeweb", git: "https://github.com/chrisk/fakeweb.git"\n  gem "letter_opener"\nend\n\ngroup :test do\n  gem \'capybara\'\n  gem "guard-rspec"\n  gem "rspec-activemodel-mocks"\n  gem "database_cleaner"\n  gem "launchy"\n  gem \'simplecov\', :require => false\n  gem \'selenium-webdriver\'\n  gem \'chromedriver-helper\'\nend\n
Run Code Online (Sandbox Code Playgroud)\n

hra*_*aud 0

当然,经过几乎一整天的尝试弄清楚这一点并最终发布到SO。SO 帖子发布后 5 分钟我就找到了解决方案。

我没有尝试的一件事是移动线路:

gem bootsnap
Run Code Online (Sandbox Code Playgroud)

稍后在 Gemfile 中所有默认 gem 下面但在开发和测试组之前。完成此操作后,Rails 服务器和 Rails 控制台突然重新开始工作。

奇怪的是我想验证这确实是问题所在,所以我取消了更改,删除了tmp/cache中的 bootsnap 缓存,删除了我的供应商/捆绑包目录并重新执行捆绑安装,并且工作正常。尽管它已经坏了近2天了。就好像暂时将 bootsnap 移动到其他宝石下方以某种方式让卡住的东西松开。奇怪的是,即使从我的应用程序中完全删除 bootsnap 也无法让它再次工作,但只是暂时将其移动到 Gemfile 底部附近就可以了?

所以我比以往任何时候都更加困惑,但至少它又开始工作了。