セッションの保存先に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を使ってる関係上すでにインストールされてた