2016-11-28 6 views
2

Ich habe vor kurzem auf Rails 5 aktualisiert. Nach dem Upgrade und der Reparatur der üblichen Dinge schien meine Anwendung korrekt zu laufen und Antworten zu liefern .Neuer Fehler beim Upgrade auf Rails 5: NoMethodError (undefinierte Methode `id 'für {}: Hash)

Obwohl meine Testsuite mit einer 94% igen Abdeckung besteht, stürzt der Controller nach ab, wenn er eine tatsächliche Anforderung ausführt, und behauptet, die Anforderung sei eine 200 OK.

Es sieht so aus, als ob die Stack-Ablaufverfolgung auf keinen Code in meiner Anwendung zeigt, sondern eher etwas in Actionpack.

Ist dies eine Fehlkonfiguration von mir oder ein berechtigter Fehler in Rails 5?

Completed 200 OK in 141ms (Views: 2,2 ms | Active: 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

Wird eine Seite im Browser getestet oder bereitgestellt? Haben Sie eine aktive Sitzung, die Sie löschen können? (vielleicht ein paar alte Daten dort?) – jphager2

+0

Serving ein aktuelles JSON-Dokument. Ich habe Cookies und Sitzungen in Rails 4 (vor dem Upgrade) deaktiviert, da es sich um eine API handelt. – Rick

+0

Ist es möglich, dass ein Teil Ihres Middleware-Stacks versucht, etwas mit der Sitzung zu tun, und es scheitert, weil es deaktiviert ist? – jphager2

Antwort

0

fand ich das Problem. In den Rails 4 Tage der App, ich set request.session_options to {}. Es scheint, dass es in Rails 5 nicht mehr ein Hash ist. Ich verwende jetzt reset_session anstelle von request.session_options = {}.

Verwandte Themen