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
で、本番アプリに反映する、
という流れになる予定。