コードをdev.myapp.com
テスト用にプッシュしてからwww.myapp.com
、本番用にプッシュできるようにしたいと思います。これはHerokuで可能ですか?
回答:
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
heroku create yourapp --remote your-remote
heroku
コマンドに--app staging
またはを含める必要があります--app production
。デフォルトを設定する方法はありますか?(コメントb / cとして尋ねると、これは本格的なSOの質問にはあまりにもターゲットが絞られているようです。)
これは、私のような初心者であるかどうかを知るために必要なすべてを説明しています:http://devcenter.heroku.com/articles/multiple-environments
元の質問の重要な部分は、ステージングアプリをメインアプリ(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でステージングアプリを実行できるようになります。
before_filter
フックを追加してapplication_controller
、ステージングのすべてをキャッチし、ユーザーに管理者としてログインするように強制し、管理者Cookieを設定して、「非管理者」の観点からアプリを表示できるようにしました。私にとってはかなりうまくいっています。
あなたはチェックする必要があります heroku_sanます
これは、herokuの環境とうまく連携します。
物事は今より簡単です。これがあなたのやり方です...
$ 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アプリの場合、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_ENV
とRACK_ENV
tostaging
はHerokuによって推奨されていません:「「ステージング」などの別のカスタム環境を作成し、config / environment / staging.rbを作成して、RAILS_ENV = stagingを使用してHerokuアプリにデプロイしたくなるかもしれません。これは良い習慣ではありません。代わりに、常に本番モードで実行し、構成変数を設定して動作を変更することをお勧めします。」:ここではこれについて詳しくdevcenter.heroku.com/articles/...
git push staging edge work
か?