Voy a especular que debido a que estoy ejecutando varias aplicaciones en mi entorno de desarrollo, incluyendo una versión de Rails 3.1/Spree 0.70 de la misma aplicación, y las visito a través de localhost, que hubo un conflicto de algún tipo en las cookies, donde la versión 3.1 establece algunas cookies que la versión 3.0.9 no puede comer. Probablemente tiene que ver con lo que @Fjan menciona en su post aquí (https://github.com/rails/rails/issues/2509):
I traced this error and it happens because the FlashHash class in the session has been changed to no longer inherit from the Hash class in rails 3.1.
Me corrió un experimento. Si hice no inicio de sesión en cualquier versión de la aplicación, podría iniciar una y cerrarla y comenzar la otra y no tener este problema tampoco. Sin embargo, cuando inicié sesión en la versión 3.0.9 y luego cerré ese servidor y lancé la versión 3.1, recibí el mismo error una vez más. Aquí está una traza parcial:
activesupport (3.1.1) lib/active_support/message_verifier.rb:34:in load' activesupport (3.1.1) lib/active_support/message_verifier.rb:34:in
verify' actionpack (3.1.1) lib/action_dispatch/middleware/cookies.rb:280:in []' actionpack (3.1.1) lib/action_dispatch/middleware/session/cookie_store.rb:53:in
block in unpacked_cookie_data' actionpack (3.1.1) lib/action_dispatch/middleware/session/abstract_store.rb:55:in stale_session_check!' actionpack (3.1.1) lib/action_dispatch/middleware/session/cookie_store.rb:51:in
unpacked_cookie_data' rack (1.3.6) lib/rack/session/cookie.rb:96:in extract_session_id' actionpack (3.1.1) lib/action_dispatch/middleware/session/abstract_store.rb:51:in
block in extract_session_id' actionpack (3.1.1) lib/action_dispatch/middleware/session/abstract_store.rb:55:in stale_session_check!' actionpack (3.1.1) lib/action_dispatch/middleware/session/abstract_store.rb:51:in
extract_session_id' rack (1.3.6) lib/rack/session/abstract/id.rb:43:in load_session_id!' rack (1.3.6) lib/rack/session/abstract/id.rb:32:in
[]' rack (1.3.6) lib/rack/session/abstract/id.rb:252:in current_session_id' rack (1.3.6) lib/rack/session/abstract/id.rb:258:in
session_exists?' rack (1.3.6) lib/rack/session/abstract/id.rb:104:in exists?' rack (1.3.6) lib/rack/session/abstract/id.rb:114:in
load_for_read!' rack (1.3.6) lib/rack/session/abstract/id.rb:64:in has_key?' actionpack (3.1.1) lib/action_dispatch/middleware/flash.rb:260:in
ensure in call' actionpack (3.1.1) lib/action_dispatch/middleware/flash.rb:261:in call' rack (1.3.6) lib/rack/session/abstract/id.rb:195:in
context' rack (1.3.6) lib/rack/session/abstract/id.rb:190:in `call'
Lo contrario también es cierto. Cuando inicié sesión en la versión 3.1 y luego apago ese servidor y lanzo la versión 3.0.9, recibí el mismo error. Aquí está una traza parcial:
activesupport (3.0.9) lib/active_support/message_verifier.rb:34:in load' activesupport (3.0.9) lib/active_support/message_verifier.rb:34:in
verify' actionpack (3.0.9) lib/action_dispatch/middleware/cookies.rb:253:in []' actionpack (3.0.9) lib/action_dispatch/middleware/session/cookie_store.rb:68:in
block in unpacked_cookie_data' actionpack (3.0.9) lib/action_dispatch/middleware/session/abstract_store.rb:223:in stale_session_check!' actionpack (3.0.9) lib/action_dispatch/middleware/session/cookie_store.rb:66:in
unpacked_cookie_data' actionpack (3.0.9) lib/action_dispatch/middleware/session/cookie_store.rb:57:in extract_session_id' actionpack (3.0.9) lib/action_dispatch/middleware/session/abstract_store.rb:39:in
load_session_id!' actionpack (3.0.9) lib/action_dispatch/middleware/session/abstract_store.rb:27:in []' actionpack (3.0.9) lib/action_dispatch/middleware/session/abstract_store.rb:210:in
current_session_id' actionpack (3.0.9) lib/action_dispatch/middleware/session/abstract_store.rb:239:in exists?' actionpack (3.0.9) lib/action_dispatch/middleware/session/abstract_store.rb:96:in
exists?' actionpack (3.0.9) lib/action_dispatch/middleware/session/abstract_store.rb:113:in load_for_read!' actionpack (3.0.9) lib/action_dispatch/middleware/session/abstract_store.rb:53:in
[]' actionpack (3.0.9) lib/action_dispatch/middleware/flash.rb:178:in call' actionpack (3.0.9) lib/action_dispatch/middleware/session/abstract_store.rb:149:in
call'
Lo que es notable para mí es que no es necesario ser, literalmente, en el proceso de actualización. Para reproducir este problema, solo necesita ejecutar dos aplicaciones que abarquen estas dos versiones de Rails que están configurando cookies con los mismos nombres ... presumiblemente en secuencia (como en mi experimento) o concurrentemente (que no he probado).
Afortunadamente, alguien más aquí proporcionará una respuesta mejor informada que esta para agregar los detalles que carece esta explicación. Mientras tanto, si se encuentra con este problema en desarrollo y no le importa el funcionamiento interno, simplemente borre sus cookies (como lo sugiere @tscolari en el hilo al que se hace referencia anteriormente: https://github.com/rails/rails/issues/2509) y siga adelante. Aclamaciones.
¿básicamente esto solo sucede en el desarrollo? no creo que lo haga No estoy ejecutando dos aplicaciones a la vez. –
No es tanto que el problema sea exclusivo de un entorno de desarrollo, sino que es mucho más probable que se encuentre allí. Probablemente se encuentre con este problema en un entorno de producción si estuviera en el proceso de una actualización. ¿Cuál es tu contexto? –
Construimos una gema para facilitar la migración del flash entre diferentes versiones de rieles: https://github.com/envato/rails_4_session_flash_backport – sj26