前回までのあらすじ
前回はherokuへデプロイする予定のアプリケーションをローカルで作成し、ローカルのRedisと接続してデータの読み書きができることを確認しました。
今回はそのアプリケーションをherokuへデプロイしてRedis Cloudとワークさせるための設定をします。
Redis Cloudプラグインをheroku上でインストールしてRedis Cloudを使えるようにする
今回はherokuで使えるRedisプラグインの内Redis Cloudを使います。理由は
- Freeで使える要領が30MBと他より少し多い
- Redis Cloudという外部サービスなのでherokuに囲い込まれなさそう
- 外部サービスなのでheroku内部からのアクセスでなくともテスト可能
といったところでしょうか。今回のアプリケーションはRedis Cloud依存の部分は全くないのでどのRedisプラグインでも問題ありません。
ここに公式マニュアルがあるので、それに従ってプラグインを追加します。
色々書いてありますがやることは2つ。プラグインを追加して接続のための情報をゲットします。
プラグインの追加
CLIからやるのがクールなのでしょうがゆとり世代なのでウェブの管理アプリからやります。
アプリのResourcesページでプラグインを追加します。
https://devcenter.heroku.com/articles/rediscloud
こんな感じ。Saveで追加完了です。
追加されたかどうか確認しましょう。
$ heroku addons === Resources for firstsnap Plan Name Price ------------- ------------------ ----- rediscloud:30 singing-coyly-0000 free === Attachments for firstsnap Name Add-on Billing App ---------- ------------------ ----------- REDISCLOUD singing-coyly-0000 firstsnap
こんな感じで準備万端です。
Redis Cloudの管理ページで接続情報を確認する
接続情報というのはつまりhost, port, そしてauthのことです。
$ heroku addons:open rediscloud
としてRedis Cloudの管理ページに飛びましょう。
こんな感じで表示されるはずです。リストのデータベースをクリックして詳細情報を確認しましょう。
黒塗してある部分がホストとポート。パスワードは初期パスワードから変更してローカルのものに合わせてみました。
これらでアクセスすればRedis Cloudがherokuで利用可能なはずです。
Redis CloudをローカルのMacからCLIで触って動くことを確認する
念の為にredis-cliを使ってRedis Cloudに対してテストをしてみましょう。
$ redis-cli -h pub-redis-XXXX.us-east-1-3.X.ec2.redislabs.com -p XXXX -a foobared pub-redis-XXXX.us-east-1-3.X.ec2.redislabs.com:XXXX> ping PONG pub-redis-XXXX.us-east-1-3.X.ec2.redislabs.com:XXXX> set test1 "welcome redis cloud!" OK pub-redis-XXXX.us-east-1-3.X.ec2.redislabs.com:XXXX> get test1 "welcome redis cloud!"
pingとset, getを試してみました。動いていますね。
Redis Cloud上のRedisにローカルのSnapウェブアプリから接続する
これは簡単ですね。devel.cfgに設定をします。ローカルのテストのためにセッション名を変えてローカルRedisの設定も残しておくとあとで楽ちんです。
redis { host = "pub-redis-XXXX.us-east-1-3.X.ec2.redislabs.com" port = XXXX auth = "foobared" max_connections = 10 max_idle_time = 100 } redis_local { host = "localhost" port = 6379 auth = "foobared" max_connections = 10 max_idle_time = 100 }
これで```cabal run -- -p 8080````してローカルのアプリから接続してテストしてみましょう。
ログインするとshow_dataできちんと表示されました。
herokuにデプロイしてheroku上のSnapウェブアプリからRedis Cloud上のRedisに接続する
これですべての準備が完了しました。
これをすべてcommitしてgit push heroic master
して完成です。
成果物
次回は
こんな素敵な記事を見つけてしまいました:
nurpax - AngularJS with Haskell
SnapにAngularJSを組み合わせてTodoリストをつくるという内容なのですが、次回はSnap+Redis+AngularJSに挑戦してみます。