少於 1 分鐘閱讀

錯誤訊息

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

參考

  1. https://github.com/rails/activerecord-session_store
  2. https://stackoverflow.com/questions/9473808/cookie-overflow-in-rails-application
  3. http://railscasts.com/episodes/127-rake-in-background

更新時間:

留言