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 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 でデプロイして動作確認します。
以上です。
これでアプリサーバを増やしてもセッション共有で悩まなくても良いですね。