我将推测,因为我在我的开发环境中运行多个应用程序,包括同一应用程序的 Rails 3.1/Spree 0.70 版本,并且我通过 localhost 访问所有这些应用程序,所以存在某种冲突cookie,3.1版本设置了一些3.0.9版本不能吃的cookie。这可能与@Fjan 在他的帖子中提到的内容有关(https://github.com/rails/rails/issues/2509):
我跟踪了这个错误,它发生是因为会话中的 FlashHash 类已更改为不再从 rails 3.1 中的 Hash 类继承。
我做了一个实验。如果我没有登录任何一个版本的应用程序,我可以启动一个并关闭它并启动另一个并且不会在任何一个上遇到这个问题。但是,当我登录 3.0.9 版本然后关闭该服务器并启动 3.1 版本时,我再次收到相同的错误。这是部分跟踪:
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?机架 (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!' 机架 (1.3.6) lib/rack/session/abstract/id.rb:64:inhas_key?' actionpack (3.1.1)
lib/action_dispatch/middleware/flash.rb:260:in
确保调用中的'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'
反过来也是如此。当我登录 3.1 版本然后关闭该服务器并启动 3.0.9 版本时,我收到了同样的错误。这是部分跟踪:
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
存在吗?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:
call' actionpack (3.0.9)
lib/action_dispatch/middleware/session/abstract_store.rb:149:in
称呼'
对我来说值得注意的是,您不必真正处于升级过程中。要重现此问题,您只需要运行两个跨过这两个版本的 Rails 的应用程序,它们正在设置具有相同名称的 cookie……可能是按顺序(如在我的实验中)或同时(我还没有尝试过)。
希望这里的其他人会提供比这更明智的答案,以添加这种松散解释所缺乏的细节。同时,如果您在开发中遇到此问题并且您不关心内部工作原理,只需清除您的 cookie(如@tscolari 在上面引用的线程中建议的那样:https ://github.com/rails /rails/issues/2509)并继续前进。干杯。