Herokuのアプリを完全に自動化しようとしています アプリのレビュー (ベータ)。 Herokuは、最近スピンアップしたインスタンスのDBをシードするためにdb/seeds.rb
を使用することを求めています。
このアプリにはdb/seeds.rb
はありません。スクリプトを設定して、現在の親(ステージング)から既存のDBをコピーし、それをレビュー中の新しいアプリのDBとして使用します。
これは私が手動で行うことができます:
heroku pg:copy myapp::DATABASE_URL DATABASE_URL --app myapp-pr-1384 --confirm myapp-pr-1384
しかし、Herokuが作成したアプリ名をpostdeployスクリプトに取得する方法がわかりません。
誰かがこれを試して、それがどのように自動化されるかを知っていますか?
私はこれと同じ問題に遭遇しました、そしてここに私がそれを解決した方法があります。
パイプラインの基本アプリの環境変数として、コピー元のデータベースのURLを設定します。私の場合、これはSTAGING_DATABASE_URL
。 URLの形式はpostgresql://username:password@Host:port/db_name
。
あなたのapp.json
ファイルを必ずその変数をコピーしてください。
あなたのapp.json
を設定する新しいデータベースをプロビジョニングしますDATABASE_URL
環境変数。
次のスクリプトを使用して、データベースをコピーしますpg_dump $STAGING_DATABASE_URL | psql $DATABASE_URL
これが私のapp.json
参照用ファイル:
{
"name": "app-name",
"scripts": {
"postdeploy": "pg_dump $STAGING_DATABASE_URL | psql $DATABASE_URL && bundle exec rake db:migrate"
},
"env": {
"STAGING_DATABASE_URL": {
"required": true
},
"HEROKU_APP_NAME": {
"required": true
}
},
"formation": {
"web": {
"quantity": 1,
"size": "hobby"
},
"resque": {
"quantity": 1,
"size": "hobby"
},
"scheduler": {
"quantity": 1,
"size": "hobby"
}
},
"addons": [
"heroku-postgresql:hobby-basic",
"papertrail",
"rediscloud"
],
"buildpacks": [
{
"url": "heroku/Ruby"
}
]
}
別の方法は、レビューアプリ間でデータベースを共有することです。継承できますDATABASE_URL
あなたのapp.json
ファイル。
PS:これは小さなチームである私の場合には十分です。多分あなたのチームには十分ではないことを覚えておいてください。そして、私は本番とテスト(またはステージング、または開発、あなたがそれを何と呼んでも)データを分離して保管します。
これを機能させるために何度も問題が発生しました。このデプロイ後のスクリプトは最終的に私のために働きました:
pg_dump -cOx $STAGING_DATABASE_URL | psql $DATABASE_URL && bundle exec Rails db:migrate
または:pg_restoreを使用した別のソリューション、 のおかげでhttps://Gist.github.com/Kalagan/1adf39ffa15ae7a125d02e86ede04b6f
{
"scripts": {
"postdeploy": "pg_dump -Fc $DATABASE_URL_TO_COPY | pg_restore --clean --no-owner -n public -d $DATABASE_URL && bundle exec Rails db:migrate"
}
}
そうですか && bundle exec Rails db:migrate
これらの多くの応答のpostdeploy
ステップの一部として。
それは実際にbundle exec Rails db:migrate
のrelease
セクションのapp.json
?