セッションの保存先にRedisを使う
Railsのデフォルトだとセッションの保存先はCookieになるけど、様々な事情からサーバ側にセッションのデータを持ちたくなることがある。
Railsはセッションの保存先をMySQLにすることもできるけど、expireがめんどくさいとか他いろいろを考えて使いたくない。
memcachedを使うのが一般的な気もするけど、memcachedをインストールするのがめんどくさかったので、今回はRedisを保存先に使うことにした。*1
redis-storeとredis-railsを使う
https://github.com/jodosha/redis-store/
https://github.com/jodosha/redis-store/tree/master/redis-rails
このgemを使うとRailsとかSinatraとかRackとかのキャッシュやセッションの保存先にRedisを使うようにすることができる。便利。Railsの場合はredis-railsを使う。
config/initializers/session.rb を編集する
Hoge::Application.config.session_store :redis_store, :servers => "redis://localhost:6379/1", :expire_in => 60 * 60 * 24 * 7 * 2
session_storeの指定のところを:redis_storeに書き換え、:serversでRedisの接続先を指定する。
Redisはdbを複数持てるので、セッション用にdbを指定した方が良いと思う。
- expire_in は2.weeks.agoのように指定したいところだけど、redis-storeの中で
- expire_inで指定した値をto_iしてたので、 60 * 60 * 24 * 7 * 2 のように書いてる。
最後にrailsを再起動すればCookieの時と同じコードで動く。簡単。
ただCookieで動いてたものをRedisに切り替えると、それまでログインしてたユーザーがログアウト状態になるのでお気をつけて。
*1:RedisはResqueを使ってる関係上すでにインストールされてた