Herokuでステージング環境をブランチを切って作成する

herokuでステージング環境を作成してみた。
ブランチを切って、切り替えできるようにした。

アプリの作成はブラウザ上で行い、
そこに後からpushしていく想定とする。
(使用していてターミナル上でアプリを作成することが少なかったので)
アプリ名(ID)は以下とする

本番:sampleapp
ステージング:sampleapp-staging

ターミナルでアプリ用のファイルが入ったディレクトリに移動する。
(以降はそのディレクトリでの作業となる。)
まず、本番環境の分にアプリをサクっとプッシュ&デプロイ。

$ git init
$ git add .
$ git remote add heroku git@heroku.com:sampleapp.git
$ git commit -m 'init'
$ git push heroku master

3つ目のremote addでプッシュ先のリモートリポジトリを設定しているわけだけれど、
このaddの後の、herokuが本番用のリモートリポジトリ名となる。

で。ローカルのリポジトリのブランチをステージング用に切る。
その後、stagingリポジトリに移動。

$ git branch
* master

$ git branch staging
$ git checkout staging  
Switched to branch 'staging'
$ git branch
  master
* staging

で、ステージング環境のリモートリポジトリを追加。

$ git remote add staging git@heroku.com:sampleapp-staging.git

確認。

$ git remote --v
heroku  git@heroku.kano:sampleapp.git (fetch)
heroku  git@heroku.kano:sampleapp.git (push)
staging git@heroku.com:sampleapp-staging.git (fetch)
staging git@heroku.com:sampleapp-staging.git (push)

で、ステージング環境にプッシュ、するわけだけれど、通常の感覚で、
ローカルのstagingリポジトリをリモートのstagingリポジトリに追加、とすると、
$ git push staging stagingになるわけだけれど、
そうすると、ステージング環境用のアプリがデプロイされない。

$ git push staging staging
. . .
Pushed to non-master branch, skipping build.
. . .

書いてある通り、masterブランチにプッシュしないとデプロイされない。
以下に情報があった。
Heroku アプリケーションの管理 – 君の瞳はまるでルビー – Ruby 関連まとめサイト

アプリケーションとして認識されるのは master ブランチにあるソースコードだけです。

同サイト内に解決方法も載っていた。

master 以外のブランチやタグにあるソースコードを既存の Heroku アプリケーションとしてデプロイするには git push に —force オプションを使う必要があります。
git push heroku beta_1:master —force
これはローカルリポジトリのブランチ beta_1 の内容を heroku リモートリポジトリの master に強制的に入れるためのものです。

というわけで、以下のようにしてステージング環境にプッシュ。

$ git push staging staging:master --force

これでステージング環境が作成できた。

主な作業はstagingブランチで作業し、上記の--force付きpushでステージングアプリに反映。
確認後、masterブランチに切り替えてstagingブランチとマージして、
通常の$ git push heroku masterで、本番アプリに反映する、
という流れになる予定。

   このエントリーをはてなブックマークに追加