Heroku で複数の環境( production, staging など)を使い分けたいときー

heroku gem が入っているのは当然として。heroku_san っていう複数環境マネジメントアプリがあるんですが、Stack が最新の cedar じゃなくて、デフォルトの bamboo-mri-1.9.2 になっちゃうので序盤は手動でやることにしました。


heroku create の際、--remote オプションを付けます。そうすると .git/config に各環境のリポジトリが登録された上 Heroku のセットアップができます。

$ heroku create appname-staging --remote staging --stack cedar
$ heroku create appname --remote production --stack cedar

上の例では、http://appname-staging.herokuapp.com/http://appname.herokuapp.com/ が用意されます。


んで、以後、heroku コマンドを実行するときは、どの環境・アプリかわかるように、--app オプションを付けます。

$ heroku addons:add mongolab:starter --app appname-staging
$ heroku addons:add mongolab:small --app appname

こんな風に。


全環境いっぺんにコントロールしたい時は heroku_san を使ったらいいんじゃないすかね。詳しくは、README を御覧ください。

$ rake heroku:create_config
production: 
  app: appname
  config:
    BUNDLE_WITHOUT: "development:test"
    GOOGLE_ANALYTICS: "UA-12345678-1"

staging:
  app: appname-staging
  config: &default
    BUNDLE_WITHOUT: "development:test"

あ、注意して欲しいのは、README では、rake heroku:create やることになってますが、Heroku の方はセットアップできてますので飛ばしてください。

$ rake all heroku:rack_env
$ rake all heroku:config

として、環境変数をセット。

全デプロイ:

$ rake all deploy

などなど。