Rails CookieOverflow

Rob*_*son 8 ruby-on-rails

突然,在我的第一个Rails应用程序中,我开始看到这个错误:

/!\ FAILSAFE /!\  Fri Sep 11 17:30:48 -0400 2009
Status: 500 Internal Server Error
ActionController::Session::CookieStore::CookieOverflow
Run Code Online (Sandbox Code Playgroud)

一些研究指出使用cookie来存储会话数据,但我没有这样做(至少不是故意的).而且,这才刚刚开始发生.我今天开始工作的唯一一件事就是能够上传一个zip文件.我正在尝试用于测试的zip文件是1.1MB.

此外,Firebug仅显示此域的2个cookie.名为_html_session507B,名为user_credentials147B.上传的文件是否以一种大文件可能导致这种情况的方式临时存储?上传单个图像效果很好.

谢谢你的帮助.

更新:哎呀.与我对下面的Vitaly和xijo的评论相反,错误不是很明显.在这种情况下,我正在将某些内容上传到我的Image模型中,并且在我的ImagesController调用时发生错误@image.save!.

有趣的是,我仍然不太明白错误发生在哪里.我创建了一个Image#before_validation方法并在那里引发异常,但CookieOverflow错误发生在我到达那里之前.在控制器进行保存调用之后和特定回调之前,是否有任何地方可以删除代码?我的理解是,这before_validation是第一次回调.

Mat*_*lly 18

如果您尝试存储flash[:notice] = 'blah'太长的消息,则很容易发生这种情况,因为该消息存储在会话cookie中.

  • 救命稻草!这正是造成这个问题的原因. (4认同)

Buz*_*zzy 8

我今天遇到了类似的问题.显然,Rails会话只能存储4k的数据.一种可能的解决方案是为会话使用数据库存储.

去做这个:

  1. 添加 config.action_controller.session_store = :active_record_store到您的environment.rb文件中.
  2. 使用创建会话的迁移文件 rake db:sessions:create
  3. 运行迁移 rake db:migrate

希望这可以帮助


Vit*_*ner 3

唯一想到的是您以某种方式确实将 .zip 放入了会话中。

调试它:

  • 将“require“ruby-debug””添加到您的环境中。rb
  • 找到打印错误消息的地方并在那里放置一个“调试器”。
  • 运行它,当它遇到“调试器”命令时它将停止
  • 检查调用堆栈以查看是否有任何相关内容。
  • 检查该时间点的会话。看看到底是什么占据了那里的空间。