Herokuでのステージングインスタンス


85

コードをdev.myapp.comテスト用にプッシュしてからwww.myapp.com、本番用にプッシュできるようにしたいと思います。これはHerokuで可能ですか?

回答:


142

Herokuへのインターフェースは本質的にGitブランチです。Heroku gemはAPIを介していくつかの作業を行いますが、Gitリポジトリ内では、それは単なる新しいリモートブランチです。

heroku create yourapp # production
git br -D heroku # delete the default branch

heroku create staging-yourapp # staging
git br -D heroku # delete the default branch

Herokuで複数のアプリケーションをセットアップすると、Gitリポジトリを次のように構成できるようになります。

git remote add staging git@heroku.com:staging-yourapp.git
git push origin staging

git remote add production git@heroku.com:yourapp.git
git push origin production

私は通常、「作業中」のブランチで作業し、マスターにGithubを使用します。

それが当てはまると仮定すると、デプロイワークフローはおそらく次のようになります。

git co -b working
# do some work

# push to github:
git co master
git merge working
git push

# push to staging:
git co staging
git merge master
git push origin staging

# push to production
git co production
git merge master
git push origin production

ありがとう-これは理にかなっています(私はgitを吸います)。質問:ブランチの「エッジ」で最先端の変更に取り組んでいるとします。myapp(現在マスターブランチで実行されている)に影響を与えずに、そのブランチをstaging-myappにプッシュするにはどうすればよいですか?しますgit push staging edge workか?
トム・レーマン

うまくいくためには、エッジをステージングブランチにマージしてプッシュするだけです。あなたの生産部門は分離していてきれいです。いつでも分岐して、そこにマージするだけの変更を加えることができます。
ルークベイズ

5
代わりに、デフォルトの「Herokuの」リモートブランチを持つアプリケーションを作成し、それを削除した後、次のような非常に良くソリューションを使用することができますheroku create yourapp --remote your-remote
dombesz

2
これを設定したら、すべてのherokuコマンドに--app stagingまたはを含める必要があります--app production。デフォルトを設定する方法はありますか?(コメントb / cとして尋ねると、これは本格的なSOの質問にはあまりにもターゲットが絞られているようです。)
Paul A Jungwirth 2011

3
@PaulAJungwirthデフォルトのHerokuアプリを設定するには、「gitconfigheroku.remotestaging」のようなものを使用します。詳細については、devcenter.heroku.com / articles / multiple-environmentsのHerokuドキュメントをご覧ください
grifaton 2012


10

元の質問の重要な部分は、ステージングアプリをメインアプリ(www.myapp.com)のサブドメイン(dev.myapp.com)にリンクすることです。これはどの回答でも扱われていません。

ステップ1:Luke Bayesの回答に示されているように、アプリの本番バージョン( 'myapp')とステージングバージョン( 'staging-myapp')の両方を構成します

ステップ2:ドメイン管理システム(GoDaddyなど)で:

Create a CNAME record:  dev.myapp.com 
that points to:   proxy.heroku.com

手順3:dev.myapp.comをstaging-myappにルーティングするようにHerokuを構成します。

heroku domains:add dev.myapp.com --app staging-myapp

CNAMEレコードが伝播する時間が経過すると、dev.myapp.comでステージングアプリを実行できるようになります。


1
グーグルなどに表示されず、人々がそれにつまずいて本物だと思わないように、アクセス制御はどうですか?何かいい解決策はありますか?
brittohalloran 2012年

はい、最も簡単な方法は、GoDaddyの手順をスキップし、HerokuURLを使用してHerokuドメインから直接アプリの「dev」バージョンにアクセスすることです。(例:stormy-lake-5483.heroku.com。)ただし、ここで説明するようにドメインから「dev」をオフにしたい場合は、robots.txtファイルをいつでもインストールして、google、bingなどに通知できます。al。開発サイトにインデックスを付けないようにします。それはそれを検索エンジンから遠ざけるのに役立ちます。
ドンリーサム2012年

最終的にbefore_filterフックを追加してapplication_controller、ステージングのすべてをキャッチし、ユーザーに管理者としてログインするように強制し、管理者Cookieを設定して、「非管理者」の観点からアプリを表示できるようにしました。私にとってはかなりうまくいっています。
brittohalloran 2012年


7

物事は今より簡単です。これがあなたのやり方です...

環境ごとにアプリを作成する

$ heroku create myapp --remote production
$ heroku create myapp-staging --remote staging

これにより、アプリごとに名前付きリモートリポジトリが作成されます。 .git/configます。。

あなたは今のいずれかを使用でき--appまたは--remote特定のアプリをターゲットにするスイッチを:

$ heroku info --app myapp-staging
$ heroku info --remote staging

Rails環境を設定する

Railsアプリの場合、Herokuはデフォルトで「本番」環境にな​​ります。ステージングアプリをステージング環境で実行する場合は、プロジェクトで環境作成し、アプリで対応するRAILS_ENVおよびRAKE_ENV環境変数を設定します。

$ heroku config:set RACK_ENV=staging RAILS_ENV=staging --remote staging

環境を構成する

他の構成変数がある場合は、環境ごとにそれらを渡す必要があります。

$ heroku config:set AWS_KEY=abc --remote staging
$ heroku config:set AWD_SECRET=123 --remote staging
...etc

それは大きな苦痛ですが、snappconfiggemを使用して実行するだけです

$ rake heroku:config:load[myapp-staging]

プロジェクトのYAML構成ファイルをHerokuにロードします。

デプロイ

これで、次のようにHerokuにプッシュするだけです。

$ git push staging master
$ git push production master

次のように移行します。

$ heroku run rake db:migrate --remote staging
$ heroku run rake db:migrate --remote production

(詳細とショートカットについては、アプリの複数の環境の管理| Heroku Dev Centerを参照してください。)


設定RAILS_ENVRACK_ENVtostagingはHerokuによって推奨されていません:「「ステージング」などの別のカスタム環境を作成し、config / environment / staging.rbを作成して、RAILS_ENV = stagingを使用してHerokuアプリにデプロイしたくなるかもしれません。これは良い習慣ではありません。代わりに、常に本番モードで実行し、構成変数を設定して動作を変更することをお勧めします。」:ここではこれについて詳しくdevcenter.heroku.com/articles/...
公園。

@ Koen-環境のコンテキストなしで複雑なRails構成を管理しようとすることは、Herokuであろうとなかろうと、私の経験ではまったく非現実的です。ステージングアプリ用と本番アプリ用の接続文字列、APIキーなどのセット全体がある場合、実際にそれらの構成変数をそれぞれに個別に設定しますか?それはただ問題を求めているだけです-Herokuはここで悪いアドバイスをしています。
ヤリン2014年

ありがとう。おそらくcommithashを使用して、実際に実際のURLを取得するステージングを探しています。これはZeitNowまたはNetlifyが簡単にしたことだと思います。
polv
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.