【Rails4】【heroku】【CentOS】sessionストアにRedisを使う

環境

Ruby 2.1.5
Rails 4.1.8
CentOS 6.6
heroku

目的

  • RailsアプリのセッションストアをキャッシュからRedisに切り替える
  • 開発環境にRedisサーバを立てる
  • 本番環境はherokuでRedisのアドオンを入れる

1. 開発環境(CentOS)にRedisサーバを立てる

# 参考にしたサイトの手順通り
# EPALが入っていなかったのでEPALもインストールする
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum --enablerepo=epel -y install redis

# サービスの起動と自動起動の設定
/etc/init.d/redis start
chkconfig redis on

# 確認
redis-cli

2. 開発環境(Rails)にRedisのgem(redis-rails)をインストールする

# Gemfile
gem 'redis-rails’

# デフォルト(cookieストア)の設定をコメントアウト
# config/initializers/session_store.rb
# Rails.application.config.session_store :cookie_store, key: '_XXXXXX_session'

# 開発環境用のRedisの設定追加
# config/enviroments/development.rb
config.session_store :redis_store, servers: 'redis://localhost:6379/0', expire_in: 60.minutes
# expire_inはセッションの有効期限

# この後アプリで実際にsessionを使う操作をし、実際にsessionが入っているか確認した。手順は下記サイト参照

RailsのセッションストアとしてRedisを使う(Mac/EC2:AmazonLinux) - Qiita

3. herokuでRedisが利用できるようにする

# アドオンをインストールする(今回はredis-cloudを使用。freeプランあり)
heroku addons:add rediscloud
# herokuに環境変数が設定されているか確認
heroku config:get REDISCLOUD_URL

# config/enviroments/production.rb
# 先程確認した環境変数は以下のようにheroku上で参照できる
config.session_store :redis_store, servers: ENV["REDISCLOUD_URL"], expire_in: 60.minutes

# 変更をherokuにpush
git push heroku master

あとはheroku上でもアプリを動かしてみる。herokuのマイページから、redisのダッシュボードが参照できるので動いているか確認する。

redis−cloudのfreeプランは30MB、Max 10接続。
メモリ、接続が8割を超えるとアラートメールが飛ぶようにデフォルトでなっていた。とりあえずこれで逼迫するようなたプラン変更かDBストアにするか検討する。

herokuから削除された場合

  1. herokuのredis cloud上から新しいDBを登録する
    • DB名とパスワードを入力する
  2. Endpoint を確認する
  3. herokuコマンドでherokuの環境変数を変更する
heroku config:set REDISCLOUD_URL=redis://rediscloud:[パスワード]@[Endpoint]