突然,在我的第一个Rails应用程序中,我开始看到这个错误:
/!\ FAILSAFE /!\ Fri Sep 11 17:30:48 -0400 2009
Status: 500 Internal Server Error
ActionController::Session::CookieStore::CookieOverflow
有一点研究指出使用cookie来存储会话数据,但我不这样做(至少不是故意的)。而且,这才刚刚开始发生。我今天开始工作的唯一一件事就是能够上传一个zip文件。我试图用来测试的zip文件是1.1MB。
此外,Firebug仅为此域显示2个Cookie。名为_html_session
的那个是507B,名为user_credentials
的那个是147B。上传的文件是否以一种大文件可能导致这种情况的方式临时存储?上传单个图像效果很好。
感谢您的帮助。
更新:糟糕。与我对下面的Vitaly和xijo的评论相反,错误不是相当即时。在这种情况下,我正在将某些内容上传到我的Image
模型,并且当ImagesController
调用@image.save!
时,错误就会发生。
有趣的是,我仍然不明白 错误发生的地方。我创建了一个Image#before_validation
方法并在那里引发异常,但CookieOverflow错误发生在我到达之前。在控制器进行保存调用之后和特定回调之前,是否有任何地方可以删除代码?我的理解是before_validation
是第一个回调。
答案 0 :(得分:18)
如果您尝试存储太长的flash[:notice] = 'blah'
消息,则很容易发生这种情况,因为该消息存储在会话cookie中。
答案 1 :(得分:8)
我今天遇到了类似的问题。显然,Rails会话只能存储4k的数据。一种可能的解决方案是为会话使用数据库存储。
要做到这一点:
config.action_controller.session_store = :active_record_store
文件environment.rb
。rake db:sessions:create
rake db:migrate
希望这有帮助
答案 2 :(得分:3)
唯一想到的是你以某种方式将.zip放入会话中。
调试它:
答案 3 :(得分:0)
不,暂时上传的文件通常存储在您的临时文件夹中,与cookie及其大小无关。
您在会话对象中存储了什么?如果永久使用会话对象,也许最好将会话对象存储在数据库中。