2009-09-11 54 views
6

突然,在我的第一個Rails應用程序,我已經開始看到了這個錯誤:Rails的CookieOverflow

/!\ 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是第一個回調。

+20

它像堆棧溢出,但更美味。 – JoshJordan 2009-09-11 21:46:43

回答

3

唯一想到的是,你不知怎的把你的.zip放入會話中。

進行調試:

  • 添加「需要‘紅寶石調試’」你的environment.rb
  • 找到它打印錯誤信息的地方,放一個「調試」在那裏。
  • 運行它,它會停止當它命中'調試器'命令
  • 檢查調用堆棧,看看是否有任何相關的。
  • 在該時間點檢查會話。看看究竟需要什麼空間。
+0

事情是,它甚至在它進入控制器的'create'方法之前出錯。就我所知,沒有任何代碼被執行。 – 2009-09-14 00:59:14

+0

糟糕。無意的謊言。這不是一瞬間。我已經用我所看到的更新了原始問題。 – 2009-09-14 01:26:48

0

不,臨時上傳的文件通常存儲在您的臨時文件夾中,並且與cookie和它的大小無關。

你在會話對象中存儲了什麼,如果永久使用會話對象,開始將會話對象存儲在數據庫中是一個不錯的主意。

+0

該死的,因爲這是我能想到的唯一(重要的)事情,我改變了,我希望那是問題所在。建議將會話存儲移到數據庫中,但我想在這之前弄清楚發生了什麼。欣賞迴應。 – 2009-09-11 22:48:46

+0

你有沒有做一些輸出,如session.inspect,看看你的請求期間寫入了什麼數據?它是在多次請求後立即發生還是立即發生? – xijo 2009-09-12 05:32:44

+0

這絕對是即時的。正如我剛纔對維塔利的回答所作的評論,我似乎從未想到我的控制器的「創造」方法。我確實列出了我的Cookie,但只有2個,總大小不到1MB(假設Firebug報告已足夠)。 – 2009-09-14 01:00:38

8

我今天剛碰到類似的問題。顯然,Rails會話只能存儲4k的數據。一種可能的解決方案是爲會話使用數據庫存儲。

要做到這一點:

  1. 添加 config.action_controller.session_store = :active_record_storeenvironment.rb文件。
  2. 創建使用rake db:sessions:create
  3. 運行遷移rake db:migrate

希望這有助於

+0

謝謝。嗡嗡聲。就我而言,我甚至沒有寫信給會議(至少不是故意的),所以這是造成我的困惑的原因。 – 2010-02-05 12:40:53

+0

同樣的問題在這裏,意外地寫了一個巨大的json流到我的會話。 – 2011-12-07 21:43:08

16

如果你嘗試和存儲flash[:notice] = 'blah'消息太長這很容易出現你的會話遷移文件,因爲該消息存儲在會話cookie中。

+2

救生員!這正是給我造成這個問題的原因。 – Raoot 2014-07-18 08:35:35

相關問題