会话cookie问题:未定义的方法`each_with_object'升级到Rails 4和Ruby 2

时间:2014-02-18 18:47:40

标签: ruby-on-rails ruby devise

我们正在从Ruby 1.9.3升级到Ruby 2,从Rails 3.x升级到Rails4。 我们正在使用设计进行身份验证。我们根据Ryan Bates Railscasts升级了宝石。

现在,当我启动服务器时,我看到以下错误。

更新:这与会话cookie有关,当我以隐身模式打开一个窗口时,我没有收到此错误,但我不希望我的用户收到此错误。

我正在使用rbenv

→ ruby -v
ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-darwin12.0]

→ gem list rack

*** LOCAL GEMS ***

rack (1.5.2)
rack-test (0.6.2)


Processing by HomeController#index as HTML
Completed 500 Internal Server Error in 4ms

NoMethodError (undefined method `each_with_object' for #<String:0x007fe40519d368>):
  actionpack (4.0.2) lib/action_dispatch/request/session.rb:175:in `stringify_keys'
  actionpack (4.0.2) lib/action_dispatch/request/session.rb:170:in `load!'
  actionpack (4.0.2) lib/action_dispatch/request/session.rb:160:in `load_for_read!'
  actionpack (4.0.2) lib/action_dispatch/request/session.rb:86:in `[]'
  warden (1.2.3) lib/warden/session_serializer.rb:30:in `fetch'
  warden (1.2.3) lib/warden/proxy.rb:212:in `user'

2 个答案:

答案 0 :(得分:1)

尝试通过删除浏览器中的Cookie来删除会话。如果这样做,那么您需要使所有会话无效,这样对您的用户来说不会爆炸。您可以通过更改secret_key_base

中的config/initializers/session_store.rb来执行此操作

答案 1 :(得分:1)

我通过在session_store.rb

中注释会话存储缓存来实现它
# Use the database for sessions instead of the cookie-based default,
# which shouldn't be used to store highly confidential information
# (create the session table with "rails generate session_migration")

#Reports::Application.config.session_store :cache_store