ruby-on-rails - 升级到 Rails 5 : NoMethodError (undefined method `id' for {}:Hash) 时出现新错误

标签 ruby-on-rails ruby ruby-on-rails-5 rack actionpack

我最近升级到 Rails 5。在升级并修复常见问题后,我的应用程序似乎可以正常运行并提供响应。

尽管我的测试套件以 94% 的覆盖率通过了测试,但在执行实际请求时, Controller 在声明请求为 200 OK 后崩溃。

看起来堆栈跟踪并未指向我的应用程序中的任何代码,而是指向 Actionpack 内部的某些内容。

这是我的错误配置,还是 Rails 5 中的合法错误?

在 141 毫秒内完成 200 OK( View :2.2 毫秒 | ActiveRecord:124.9 毫秒)

    NoMethodError (undefined method `id' for {}:Hash):

    actionpack (5.0.0.1) lib/action_dispatch/request/session.rb:70:in `id'
    rack (2.0.1) lib/rack/session/abstract/id.rb:341: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'
    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'
    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'
    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-cors (0.4.0) lib/rack/cors.rb:80: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'
    thin (1.7.0) lib/thin/connection.rb:86:in `block in pre_process'
    thin (1.7.0) lib/thin/connection.rb:84:in `catch'
    thin (1.7.0) lib/thin/connection.rb:84:in `pre_process'
    thin (1.7.0) lib/thin/connection.rb:53:in `process'
    thin (1.7.0) lib/thin/connection.rb:39:in `receive_data'
    eventmachine (1.2.1) lib/eventmachine.rb:194:in `run_machine'
    eventmachine (1.2.1) lib/eventmachine.rb:194:in `run'
    thin (1.7.0) lib/thin/backends/base.rb:73:in `start'
    thin (1.7.0) lib/thin/server.rb:162:in `start'
    rack (2.0.1) lib/rack/handler/thin.rb:22:in `run'
    rack (2.0.1) lib/rack/server.rb:296:in `start'
    railties (5.0.0.1) lib/rails/commands/server.rb:79:in `start'
    railties (5.0.0.1) lib/rails/commands/commands_tasks.rb:90:in `block in server'
    railties (5.0.0.1) lib/rails/commands/commands_tasks.rb:85:in `tap'
    railties (5.0.0.1) lib/rails/commands/commands_tasks.rb:85:in `server'
    railties (5.0.0.1) lib/rails/commands/commands_tasks.rb:49:in `run_command!'
    railties (5.0.0.1) lib/rails/commands.rb:18:in `<top (required)>'
    bin/rails:4:in `require'
    bin/rails:4:in `<main>'

最佳答案

我发现了问题。在 Rails 4 天的应用程序中,我 set request.session_options to {} .它似乎不再是 Rails 5 中的哈希。我现在使用 reset_session 代替 request.session_options = {}

关于ruby-on-rails - 升级到 Rails 5 : NoMethodError (undefined method `id' for {}:Hash) 时出现新错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40854937/

相关文章:

ruby-on-rails - Rails 中的大小写不敏感

ruby-on-rails - 考拉的 react 时间。 20秒等待响应

ruby - 在 Ubuntu 上安装 Ruby 1.9.1?

ruby-on-rails - 非常缓慢的迁移

ruby-on-rails - Rails 助手在哪里可用?

ruby-on-rails - Bundler 2 未安装在 docker 中

ruby-on-rails - 使用 bundle exec 运行 Rails 控制台

ruby-on-rails - 如何使用 Ruby 或 Rails 从 URL 中提取 URL 参数?

ruby-on-rails - 使用 “impressionist” gem Ruby on Rails 计算页面浏览量

ruby-on-rails - link_to href 中的不安全参数值