【问题标题】:rails app runtime error reports different version of action pack gem than bundle install installsrails app runtime error 报告的 action pack gem 版本与 bundle install installs 不同
【发布时间】:2019-03-26 15:29:38
【问题描述】:

升级到 OS X 10.14 后,我的 rails 应用程序不再工作。我试图找出原因。我在尝试将 @secret 分配给 cipher.key 的行上收到 active_support_(5.0.0.1)_lib/active_support/message_encryptor.rb 引发的异常。例外情况是密钥必须是 32 字节。

在我尝试解决的这一点上,我想知道为什么从应用程序目录运行 bundle install 会报告它正在安装 activesupport 5.0.7.2,但是当应用程序运行时(通过 puma),activesupport 中的代码会引发异常5.0.0.1。 rvm 是我的 ruby​​ 版本管理器。它报告说它正在运行 ruby​​ 2.4.1(这是我在升级之前安装的版本)。我认为 OS X 10.14 带有 2.3.7,但这似乎不是问题。 Rails 的版本为 5.0.0.1。 我想我会尝试将 Rails 更新到 5.0.7.2。我阅读了 Upgrading Ruby on Rails 页面并修改了我的 Gemfile 以指定 rails ~= 5.0.7(以前说 ~> 5.0.2),然后运行 ​​rake rails::update 会产生错误提示“您已经激活了 rake 12.3 .2 但您的 Gemfile 需要 rake 11.3.0.'。 我在我的 Gemfile 中找不到对 rake 的引用。 boot.rb 在 require 'bundler/setup' 上抛出错误。

我希望有人能告诉我如何将 Rails 更新到更新的版本,希望这样做后,我最初的问题就会消失。 来自服务器日志的完整堆栈:

ArgumentError (key must be 32 bytes):

activesupport (5.0.0.1) lib/active_support/message_encryptor.rb:72:in `key='
activesupport (5.0.0.1) lib/active_support/message_encryptor.rb:72:in `_encrypt'
activesupport (5.0.0.1) lib/active_support/message_encryptor.rb:58:in `encrypt_and_sign'
actionpack (5.0.0.1) lib/action_dispatch/middleware/cookies.rb:592:in `commit'
actionpack (5.0.0.1) lib/action_dispatch/middleware/cookies.rb:465:in `[]='
actionpack (5.0.0.1) lib/action_dispatch/middleware/session/cookie_store.rb:117:in `set_cookie'
rack (2.0.1) lib/rack/session/abstract/id.rb:353:in `commit_session'
rack (2.0.1) lib/rack/session/abstract/id.rb:224:in `context'
rack (2.0.1) lib/rack/session/abstract/id.rb:216:in `call'
actionpack (5.0.0.1) lib/action_dispatch/middleware/cookies.rb:613:in `call'
activerecord (5.0.0.1) lib/active_record/migration.rb:552:in `call'
actionpack (5.0.0.1) lib/action_dispatch/middleware/callbacks.rb:38:in `block in call'
activesupport (5.0.0.1) lib/active_support/callbacks.rb:97:in `__run_callbacks__'
activesupport (5.0.0.1) lib/active_support/callbacks.rb:750:in `_run_call_callbacks'
activesupport (5.0.0.1) lib/active_support/callbacks.rb:90:in `run_callbacks'
actionpack (5.0.0.1) lib/action_dispatch/middleware/callbacks.rb:36:in `call'
actionpack (5.0.0.1) lib/action_dispatch/middleware/executor.rb:12:in `call'
actionpack (5.0.0.1) lib/action_dispatch/middleware/remote_ip.rb:79:in `call'
actionpack (5.0.0.1) lib/action_dispatch/middleware/debug_exceptions.rb:49:in `call'
web-console (3.4.0) lib/web_console/middleware.rb:135:in `call_app'
web-console (3.4.0) lib/web_console/middleware.rb:28:in `block in call'
web-console (3.4.0) lib/web_console/middleware.rb:18:in `catch'
web-console (3.4.0) lib/web_console/middleware.rb:18:in `call'
actionpack (5.0.0.1) > lib/action_dispatch/middleware/show_exceptions.rb:31:in `call'
railties (5.0.0.1) lib/rails/rack/logger.rb:36:in `call_app'
railties (5.0.0.1) lib/rails/rack/logger.rb:24:in `block in call'
activesupport (5.0.0.1) lib/active_support/tagged_logging.rb:70:in `block in tagged'
activesupport (5.0.0.1) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (5.0.0.1) lib/active_support/tagged_logging.rb:70:in `tagged'
railties (5.0.0.1) lib/rails/rack/logger.rb:24:in `call'
sprockets-rails (3.2.0) lib/sprockets/rails/quiet_assets.rb:13:in `call'
actionpack (5.0.0.1) lib/action_dispatch/middleware/request_id.rb:24:in `call'
rack (2.0.1) lib/rack/method_override.rb:22:in `call'
rack (2.0.1) lib/rack/runtime.rb:22:in `call'
activesupport (5.0.0.1) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
actionpack (5.0.0.1) lib/action_dispatch/middleware/executor.rb:12:in `call'
actionpack (5.0.0.1) lib/action_dispatch/middleware/static.rb:136:in `call'
rack (2.0.1) lib/rack/sendfile.rb:111:in `call'
railties (5.0.0.1) lib/rails/engine.rb:522:in `call'
puma (3.12.0) lib/puma/configuration.rb:225:in `call'
puma (3.12.0) lib/puma/server.rb:658:in `handle_request'
puma (3.12.0) lib/puma/server.rb:472:in `process_client'
puma (3.12.0) lib/puma/server.rb:332:in `block in run'
puma (3.12.0) lib/puma/thread_pool.rb:133:in `block in spawn_thread'
  Rendering /Users/jboss/.rvm/gems/ruby-2.4.1/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout
  Rendering /Users/jboss/.rvm/gems/ruby-2.4.1/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/_source.html.erb
  Rendered /Users/jboss/.rvm/gems/ruby-2.4.1/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (1.8ms)
  Rendering /Users/jboss/.rvm/gems/ruby-2.4.1/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb
  Rendered /Users/jboss/.rvm/gems/ruby-2.4.1/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (1.1ms)
  Rendering /Users/jboss/.rvm/gems/ruby-2.4.1/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb
  Rendered /Users/jboss/.rvm/gems/ruby-2.4.1/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (0.6ms)
  Rendered /Users/jboss/.rvm/gems/ruby-2.4.1/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout (84.1ms)
Started PUT "/__web_console/repl_sessions/2b97efeccea3498fd96b79db013b3da9" for 127.0.0.1 at 2019-03-26 10:59:35 -0400
Started PUT "/__web_console/repl_sessions/2b97efeccea3498fd96b79db013b3da9" for 127.0.0.1 at 2019-03-26 10:59:36 -0400

来自 Gemfile.lock:

    actioncable (5.0.7.2)
      actionpack (= 5.0.7.2)
      nio4r (>= 1.2, < 3.0)
      websocket-driver (~> 0.6.1)
    actionmailer (5.0.7.2)
      actionpack (= 5.0.7.2)
      actionview (= 5.0.7.2)
      activejob (= 5.0.7.2)
      mail (~> 2.5, >= 2.5.4)
      rails-dom-testing (~> 2.0)
    actionpack (5.0.7.2)
      actionview (= 5.0.7.2)
      activesupport (= 5.0.7.2)
      rack (~> 2.0)
      rack-test (~> 0.6.3)
      rails-dom-testing (~> 2.0)
      rails-html-sanitizer (~> 1.0, >= 1.0.2)
    actionview (5.0.7.2)
      activesupport (= 5.0.7.2)
      builder (~> 3.1)
      erubis (~> 2.7.0)
      rails-dom-testing (~> 2.0)
      rails-html-sanitizer (~> 1.0, >= 1.0.3)
    activejob (5.0.7.2)
      activesupport (= 5.0.7.2)
      globalid (>= 0.3.6)
    activemodel (5.0.7.2)
      activesupport (= 5.0.7.2)
    activerecord (5.0.7.2)
      activemodel (= 5.0.7.2)
      activesupport (= 5.0.7.2)
      arel (~> 7.0)
    activesupport (5.0.7.2)
      concurrent-ruby (~> 1.0, >= 1.0.2)
      i18n (>= 0.7, < 2)
      minitest (~> 5.1)
      tzinfo (~> 1.1)
.
.
.
    railties (5.0.7.2)
      actionpack (= 5.0.7.2)
      activesupport (= 5.0.7.2)
      method_source
      rake (>= 0.8.7)
      thor (>= 0.18.1, < 2.0)
    rake (12.3.2)

【问题讨论】:

  • 你能从你的服务器日志中发布错误的完整堆栈跟踪吗?还要检查 Gemfile.lock 中的 activesupport gem 版本。您还可以 control+f 搜索您的 Gemfile.lock 以获取 rake。我的印象是,其他一些 gem 需要早期版本的 rake。`您可能能够摆脱捆绑更新,但在这样做之前确保您有一个 git 提交! bundler.io/v2.0/guides/updating_gems.html "这将从头开始解决依赖关系,忽略 Gemfile.lock。如果这样做,请保持 git reset --hard"

标签: ruby-on-rails rake rvm


【解决方案1】:

看起来不错的是,从您的堆栈跟踪来看,它使用的是正确的 ruby​​ 版本。看起来不对的是,您的 gemfile.lock 说您被锁定在其他 gem 中,那么为什么它不运行它们呢? (主动支持 5.0.0.1 而不是 5.0.7.2)

我个人认为您需要捆绑更新/和/或删除锁并再次运行捆绑安装。或者追踪麻烦制造者的宝石并更新它们。甚至将ruby '2.4.1' 放入您的gemfile 中也可能会锁定您的捆绑程序,以确保它使用的是正确的ruby 版本。一件事可能会帮助您找到正在使用旧耙子的宝石: gem dependency rake --reverse-dependencies How do I find out which gem has a specific dependency? 然后搜索到 rake 11.3.0,看看它在使用什么。

您实际上有一个已被讨论过的旧错误: https://github.com/rails/rails/issues/25185 据说是通过以下方式修复的: https://github.com/rails/rails/pull/25192

问题是为什么你的 Rails 在你升级后仍然运行 5.0.0.1?我想知道您的 2.4.1 rvm gems 文件是否有新的升级 gems,或者您的捆绑程序是否以某种方式将它们安装到不同的版本中。或许还可以检查bundle show activesupport 以查看跟踪返回到您的 rvm 2.4.1 文件夹。

这个人可能对你有一个可能的答案,他回答了他自己的问题: Rails 5 production error activesupport

所以也许完全升级到更高的轨道可能会节省您的时间。

希望其中一些能让你走上正确的道路!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 2016-03-19
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多