hakobera's blog

技術メモ。たまに雑談

Heroku で Redis に Session を - Heroku で動く Node アプリを作る 弐

ソースはこちら


hakobera / one-paper — Bitbucket

基本手順

  • connect-redis モジュールへの依存関係を package.json に追加
  • Redis To Go Add-on の追加
  • Express でセッションを Redis に格納するようにソースを変更
  • Heroku を production モードで動作する設定を追加

connect-redis モジュールへの依存関係を package.json に追加

package.json のdependencies に追加。

 "dependencies": {
      ...
    , "connect-redis": "1.0.6"
    , ... 
  }

Redis To Go Add-on の追加

Heroku Add-Ons : Redis To Go

heroku addons:add redistogo:nano --app [appname]

nano だと、5MB までとか色々制限はあるが、とりあず無料なのでこれで。

Express でセッションを Redis に格納するようにソースを変更

開発環境に Redis を用意するのは面倒なので、本番環境でのみ Redis に セッションを保存するようにします。
環境変数 REDISTOGO_URL は Redis To Go Add-on を追加した時点で自動的に追加されます。

確認するには以下のコマンドで。

heroku config --app [appname]

ソースは以下のように書きます。

var env = process.env;
...
app.configure('production', function() {
  var RedisStore = require('connect-redis')(express);
  var redisUri = url.parse(env.REDISTOGO_URL);
  var store = new RedisStore({
    host: redisUri.hostname,
    port: redisUri.port,
    pass: redisUri.auth.split(':')[1]
  });
  app.use(express.session({ secret: env.SESSION_SECRET, store: store }));
  app.use(express.errorHandler());
});

参考:
Express : Session Support
Redis To Go | Heroku Dev Center

Heroku を production モードで動作する設定を追加

heroku config:add NODE_ENV=production -app [appname]

あとはいつものように git push heroku master でデプロイして動作確認します。

以上です。

これでアプリサーバを増やしてもセッション共有で悩まなくても良いですね。