2016-11-28 49 views
2

我最近升級到了Rails 5.在升級和修復常見的東西之後,我的應用程序似乎運行正常並且響應。升級到Rails 5時出現新錯誤:NoMethodError(未定義方法ID爲{}:Hash)

即使我的測試套件通過了94%的覆蓋率,當執行實際請求時,控制器在之後崩潰,聲稱請求是200 OK

看起來堆棧跟蹤並不指向我的應用程序中的任何代碼,而是指向Actionpack中的任何代碼。

這是我的錯誤配置,還是Rails 5中的合法錯誤?

完成200 OK在141ms(瀏覽次數:時間爲2.2ms | ActiveRecord的:124.9ms)

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>' 
+0

這是測試還是在瀏覽器中提供頁面?你有一個活動會話,你可以嘗試刪除? (也許有一些舊數據?) – jphager2

+0

服務一個實際的JSON文檔。我禁用了Rails 4中的cookie和會話(預升級),因爲它是一個API。 – Rick

+0

中間件堆棧的一部分是否有可能試圖在會話中執行某些操作,並且因爲它被禁用而失敗? – jphager2

回答

0

我發現這個問題。在Rails 4天的應用程序中,我set request.session_options to {}。看來它不再是Rails 5中的散列。我現在使用reset_session代替request.session_options = {}

相關問題