I'm going to speculate that because I'm running multiple applications in my development environment, including a Rails 3.1/Spree 0.70 version of the same app, and I visit all of them via localhost, that there was a conflict of some sort in the cookies, where the 3.1 version set some cookie that the 3.0.9 version couldn't eat. It probably has to do with what @Fjan mentioned in his post here (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.
I ran an experiment. Provided I did not login on either version of the app, I could start one up and shut it down and start the other and not run into this problem on either. However, when I logged into the 3.0.9 version and then shut down that server and launched the 3.1 version, I received the same error once again. Here is a partial trace:
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'
The reverse was also true. When I logged into the 3.1 version and then shut down that server and launched the 3.0.9 version, I received the same error. Here is a partial trace:
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'
What's notable to me is that you needn't literally be in the process of upgrading. To reproduce this issue, you need only be running two apps spanning these two versions of Rails that are setting cookies with the same names...presumably either in sequence (as in my experiment) or concurrently (which I haven't tried).
Hopefully, someone else here will provide a better-informed answer than this to add the details this loose explanation lacks. In the meantime, if you're running into this issue in development and you don't care about the inner workings, just clear your cookies (as suggested by @tscolari in the thread referenced above: https://github.com/rails/rails/issues/2509) and move along. Cheers.