RailsでDBセッションを使う
Post date: 2009/05/19 9:49:31
Status: 500 Internal Server Error
ActionController::Session::CookieStore::CookieOverflow
というエラーが出るようになったので、セッションデータをDBにストアするよう変更する。
CookieStoreは、 セッションデータをサーバ上のファイルやDBに保存する代りに、クッキー自体に保存する。 このため、セッションデータの読み書きのコストが減ったり、古いセッションデータ の掃除の手間がなくなる、という利点があるとのことだが、容量が4kしかないらしい。
必要な変更:
config/environment.rbで以下の行をアンコメントする:
config.action_controller.session_store = :active_record_store
以下を実行してセッション格納用テーブルを作成する
rake db:sessions:create
rake db:migrate
app/controllers/application.rbで以下のような部分で、:secret前のコメントを外す:
protect_from_forgery # :secret => '6d0b20bbf9203508337aff3214f79efb7a0'
sessionsの肥大化を防ぐ [2020−3−8追記]
https://github.com/rails/activerecord-session_store に書いてあるように、crontabなどでdb:sessions:trimする必要ある。
ただし、これを実行しても、MYSQLのテーブル sessions.ibdは小さくならない。これを物理的に小さくするには、https://www.forknerds.com/reduce-the-size-of-mysql/ にあるように、optimize tableする。具体的には
mysql -u root -p で入り
use alb_production;
optimize table sessions;