[Rails] cookie overflow 問題處理
錯誤訊息
ActionDispatch::Cookies::CookieOverflow in UsersController#create
解決方式
使用 active_record_store 或是 mem_record_store 把 cookie 內容另外存起來
本文使用 active_record_store 處理
解決步驟
安裝 gem
gem 'activerecord-session_store'
產生需要用到的 migration
rake db:sessions:create
rake db:migrate
config/initializers/session_store.rb 中,將原有的 :cookie_store 改為 :active_record_store
Application.config.session_store :cookie_store, :key => '_my_app_session'
to
Application.config.session_store :active_record_store, :key => '_my_app_session'
加入定時刪除排程
官方建議 prodcution 環境需要建立排程定時清理 db,避免資料一直增長 程式參考
rake db:sessions:clear --> 清空 session
rake db:sessions:trim --> 清理 30 天以前的 session
可以在 sidekiq 塞一個 job 執行
cutoff_period = (ENV['SESSION_DAYS_TRIM_THRESHOLD'] || 30).to_i.days.ago
ActiveRecord::SessionStore::Session.
where("updated_at < ?", cutoff_period).
delete_all
參考
- https://github.com/rails/activerecord-session_store
- https://stackoverflow.com/questions/9473808/cookie-overflow-in-rails-application
- http://railscasts.com/episodes/127-rake-in-background
留言