ruby_sessが爆発する件について
Railsはページを表示するたびにどんどんsessionファイルを作っていく。
そのまま放置しておくと大変なことが起こる。
というわけでcronを使って定期的にsessionファイルを削除しなくちゃいけないわけだが、たいしてセキュリティの必要性が無く、利便性のためにhatenaのサービスみたいに1ヶ月くらいセッション情報を残して起きたいときには困ったことになる。
うちのような対してアクセスがないはずのページでも3日くらいセッションを残しておくだけで500近くのセッションファイルがたまる。ほんと勘弁して欲しい。
んで、生成されているセッションファイルは100バイトにも満たない小さいファイルばかり。一体どんな情報が格納されているのか不思議に思い見てみるに、
[yuanying@juha sessions]$ more ruby_sess.f872e3fe6cfe9005 {" hash{"return-to"/my_book/destroy/242" flashIC:'ActionController::Flash::FlashHash{ @used{
こんな感じ。
たぶん検索エンジンのボットがアクセスして残していったセッション情報だろう。。。
ちゃんとログインしているユーザが残すセッションファイルは大体以下のようになる。
[yuanying@juha sessions]$ more ruby_sess.703efba813bfac48 {" hash{: usero: User :@new_record_before_save0:@attributes{" salt"***********************"delete_af lastname"^LOhtsuka"firstname"5950508b38a0cf83ebf88237924d1b75f" role0" ??,???"salted_password"**********************" Yuanying"created_at"2006-09-16 11:42:32" email"yuanying@fraction.jp:@my_books0:@new_passwordF:^L@errorso:ActiveRecord::Errors;^L{ @base" flashIC:'ActionController::Flash::FlashHash{ @used{
ファイルサイズを基準にすれば消して良いセッションファイルと消してはいけないセッションファイルを区別できそうだ。
find ${RAILS_ROOT}/tmp/sessions -name "ruby_sess*" \( -ctime +30 -or -size -200c \) -delete
ということで、ファイルサイズが200バイト以下のファイル、もしくは30日以上経過しているセッションファイルを削除するようなワンライナーをcronに登録することにした。
[yuanying@juha sessions]$ ll | wc -l 575 [yuanying@juha sessions]$ ll | wc -l 3 [yuanying@juha sessions]$ ll 合計 8 -rw------- 1 yuanying yuanying 622 5月 10 21:28 ruby_sess.64e42a844722d48e -rw------- 1 yuanying yuanying 622 5月 11 11:09 ruby_sess.703efba813bfac48
登録後、574もあった意味のないセッションファイルが2個まで削減できた。
うむ、よしよし。