Ruby on rails 升级到Rails 5:NoMethodError时出现新错误(对于{}:Hash,未定义的方法`id';)

Ruby on rails 升级到Rails 5:NoMethodError时出现新错误(对于{}:Hash,未定义的方法`id';),ruby-on-rails,ruby,ruby-on-rails-5,rack,actionpack,Ruby On Rails,Ruby,Ruby On Rails 5,Rack,Actionpack,我最近升级到了Rails 5。在升级和修复了一些常见的东西之后,我的应用程序似乎运行正常,并提供了响应 即使我的测试套件以94%的覆盖率通过,但在执行实际请求时,控制器在声称请求是200 OK后崩溃 看起来堆栈跟踪并没有指向我的应用程序中的任何代码,而是指向Actionpack中的某些代码 这是我的一个错误配置,还是Rails 5中的一个合法错误 在141ms内完成200 OK(视图:2.2ms |活动记录:124.9ms) NoMethodError(未定义{}:Hash的方法'id': ac

我最近升级到了Rails 5。在升级和修复了一些常见的东西之后,我的应用程序似乎运行正常,并提供了响应

即使我的测试套件以94%的覆盖率通过,但在执行实际请求时,控制器在声称请求是
200 OK
后崩溃

看起来堆栈跟踪并没有指向我的应用程序中的任何代码,而是指向Actionpack中的某些代码

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

在141ms内完成200 OK(视图:2.2ms |活动记录:124.9ms)

NoMethodError(未定义{}:Hash的方法'id':
actionpack(5.0.0.1)lib/action\u dispatch/request/session.rb:70:in'id'
机架(2.0.1)lib/rack/session/abstract/id.rb:341:在“提交会话”中
机架(2.0.1)lib/rack/session/abstract/id.rb:224:在“上下文”中
机架(2.0.1)lib/rack/session/abstract/id.rb:216:in'call'
actionpack(5.0.0.1)lib/action\u dispatch/middleware/cookies.rb:613:in'call'
actionpack(5.0.0.1)lib/action\u dispatch/middleware/callbacks.rb:38:in'block in call'
activesupport(5.0.0.1)lib/active\u support/callbacks.rb:97:in`\uuuuu run\u callbacks\uuuuu'
activesupport(5.0.0.1)lib/active\u-support/callbacks.rb:750:in``运行\调用\回调'
activesupport(5.0.0.1)lib/active\u support/callbacks.rb:90:in'run\u callbacks'
actionpack(5.0.0.1)lib/action\u dispatch/middleware/callbacks.rb:36:in'call'
actionpack(5.0.0.1)lib/action\u dispatch/middleware/executor.rb:12:in'call'
actionpack(5.0.0.1)lib/action\u dispatch/middleware/remote\u ip.rb:79:in'call'
actionpack(5.0.0.1)lib/action\u dispatch/middleware/debug\u exceptions.rb:49:in'call'
actionpack(5.0.0.1)lib/action\u dispatch/middleware/show\u 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\u support/taged\u logging.rb:70:in'block in taged'
activesupport(5.0.0.1)lib/active\u support/taged\u logging.rb:26:in'taged'
activesupport(5.0.0.1)lib/active\u support/taged\u logging.rb:70:in'taged'
railties(5.0.0.1)lib/rails/rack/logger.rb:24:in'call'
actionpack(5.0.0.1)lib/action\u dispatch/middleware/request\u id.rb:24:in'call'
框架(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\u support/cache/strategy/local\u cache\u middleware.rb:28:in'call'
actionpack(5.0.0.1)lib/action\u dispatch/middleware/executor.rb:12:in'call'
actionpack(5.0.0.1)lib/action\u dispatch/middleware/static.rb:136:in'call'
机架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'
精简(1.7.0)lib/thin/connection.rb:86:in'block in pre_进程'
精简(1.7.0)lib/thin/connection.rb:84:in'catch'
精简(1.7.0)lib/thin/connection.rb:84:in'pre_进程'
精简(1.7.0)lib/thin/connection.rb:53:in'process'
精简(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'
精简(1.7.0)lib/thin/backends/base.rb:73:in'start'
精简(1.7.0)lib/thin/server.rb:162:in'start'
机架(2.0.1)lib/rack/handler/thin.rb:22:in'run'
机架(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\u tasks.rb:90:in'block in server'
railties(5.0.0.1)lib/rails/commands/commands\u tasks.rb:85:in'tap'
railties(5.0.0.1)lib/rails/commands/commands\u tasks.rb:85:in'server'
railties(5.0.0.1)lib/rails/commands/commands\u tasks.rb:49:in'run\u command!'
railties(5.0.0.1)lib/rails/commands.rb:18:in`'
箱子/轨道:4:在'require'中
箱子/轨道:4:in`'

我发现了问题。在应用程序的Rails 4天中,我。在Rails 5中,它似乎不再是散列。我现在使用
reset\u session
代替
request.session\u options={}

这是在测试浏览器中的页面还是在为其提供服务?您是否有可以尝试删除的活动会话?(可能有一些旧数据?)提供实际的JSON文档。我在Rails 4(升级前)中禁用了Cookie和会话,因为它是一个API。是否有可能您的中间件堆栈的一部分正在尝试对会话执行某些操作,但它失败了,因为它被禁用了?我对此表示怀疑,但我在堆栈跟踪中没有看到任何自定义中间件。只是一堆Rails的东西。酷,你应该添加它作为答案。
    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>'