web-dev-qa-db-ja.com

あるherokuアプリから別のherokuアプリにdbをより速く転送する

本番データベースをテストアプリに転送するより速い方法はありますか?

現在、ローカルマシンに対してheroku db:pullを実行してから、heroku db:Push --app testappを実行していますが、これには時間がかかります。シードデータがいくつかありますが、実際のデータでテストするほど正確ではありません。また、どちらも隣接するAWSクラウドに保存されているため、データを移動するためのより高速な方法が必要ですか?

Herokuバンドルを使用することを考えましたが、animateコマンドがなくなっていることに気付きましたか?

bundles:animate <bundle>     # animate a bundle into a new app 
42
holden

Rails Apps。およびheroku db:pull/Pushは非常に遅いため、ステージング、テスト、および本番環境間でデータベースを移行することは非常に一般的です。これまでに見つけた最善の方法は、 Heroku PG Backupsアドオン および 無料 。次の手順に従って、本番データベースをステージングサーバーに移行しました。

1)本番アプリデータベースのバックアップを作成します

heroku pg:backups capture --app production-app

これにより、メインデータベース(通常はdatabase.ymlの本番データベース)からb001バックアップファイルが生成されます。

2)すべてのバックアップを表示するには(オプション)

heroku pg:backups --app production-app

3)pg:backups restoreコマンドを使用して、運用サーバー上の最後のバックアップファイルからステージングサーバーデータベースにデータを入力します。

heroku pg:backups restore $(heroku pg:backups public-url --app production-app) DATABASE_URL --app staging-app

復元は破壊的な操作であることに注意してください。既存のデータを削除してから、バックアップファイルの内容に置き換えます。

86
Zeeshan

そのため、今ではさらに簡単になっています..pgbackupsの一部として転送コマンドをチェックアウトしてください

heroku pgbackups:transfer HEROKU_POSTGRESQL_PINK sushi-staging::HEROKU_POSTGRESQL_OLIVE -a sushi

https://devcenter.heroku.com/articles/upgrading-heroku-postgres-databases#4b-alternative-transfer-data-between-applications

これは、プロダクションコードをステージングサイトに戻すのに非常に効果的です。

14
Jonathon Batson

正解は2015年3月11日をもって再び変更されました。

heroku pg:backups restore $(heroku pg:backups public-url --app myapp-production) DATABASE_URL --app myapp-staging

特に、引数がpublic-urlになっていることに注意してください。

https://blog.heroku.com/archives/2015/3/11/pgbackups-levels-up

11
jelder

2015年半ばの更新...

Pgbackupsアドオンは非推奨になりました。もうpgbackups:transferはありません。 pg:copyはこのシナリオに最適です。

yourappからデータベースをコピーするには(データベース名の例:HEROKU_POSTGRESQL_PINK_URLからyourapp_staging (データベース名の例:HEROKU_POSTGRESQL_WHITE_URL)

# turn off the web dynos in staging
heroku maintenance:on -a yourapp-staging

# if you have non-web-dynos, do them too
heroku ps:scale worker=0 -a yourapp-staging

# backup the staging database if you are paranoid like me (optional)
heroku pg:backups capture -a yourapp-staging

# execute the copy to splat over the top of the staging database
heroku pg:copy yourapp::HEROKU_POSTGRESQL_PINK_URL HEROKU_POSTGRESQL_WHITE_URL -a yourapp-staging

次に、完了したら、ステージングをオンに戻します。

# this is if you have workers, change '1' to whatever
heroku ps:scale worker=1 -a yourapp-staging

heroku maintenance:off -a yourapp-staging

注意:heroku pg:info -a yourapp-staging(およびyourapp)を使用して、データベース定数を取得できます。

(ソース: https://devcenter.heroku.com/articles/upgrading-heroku-postgres-databases#upgrade-with-pg-copy-default

11
Lucas Nelson

2016年半ばの更新...

Herokuに--fastフォークを作成するときにフラグを立てますが、最大30時間古くなります。

$ heroku addons:create heroku-postgresql:standard-4 --fork HEROKU_POSTGRESQL_CHARCOAL --fast --app sushi

https://devcenter.heroku.com/articles/heroku-postgres-fork#fork-fast-option

0
cvng
psql -h test_Host -c 'drop database test_db_name; create database test_db_name;'

pg_dump -h production_Host production_db_name | psql -h test_Host test_db_name`

これは、production_Hostまたはtest_Hostで実行できます—両方の方法で機能します。

0
Tometzky

これはテストしていませんが、機能する可能性があります。

これを実行して、ソースデータベースのURLを取得します。

heroku console "ENV['DATABASE_URL']" --app mysourceapp

次に、それを使用してdb:Pushを実行してみてください。

heroku db:Push database_url_from_before --app mytargetapp

Herokuがネットワークの外部からのDBマシンへのアクセスを許可していない場合、これは機能しない可能性があります。これはおそらく事実です。おそらく、アプリコード内のどこか(おそらくrakeタスク)からタップ(heroku dbコマンドが内部で使用するgem)を使用してみることができます。すべてが完全にAWS内にとどまるため、これは上記のアプローチよりもさらに高速になります。

編集:

これが私が上で説明したことをするための(明らかにハッキーな)方法です:

上記の最初のコードスニペットのようにデータベースのURLを取得します。次に、rakeタスクから(コンソールで実行できますが、コンソールコマンドで30秒のタイムアウト制限に達するリスクがあります)、タップに対してシェルコマンドを実行します(Rubyから直接タップを使用できるかどうかを簡単に判断できませんでした。すべてドキュメントはCLIの使用法を示しています):

`taps pull database_url_from_source_app #{ENV['DATABASE_URL']}`

バックティックは重要です。 Rubyは、タップするシェルコマンドを示します。タップコマンドにアプリからアクセスできることを願っています。これにより、実行しているため、Herokuの外部からデータベースマシンにアクセスする問題が回避されます。アプリ内からこのコマンド。

0
tfe

Herokuを使用すると、本番環境で既存のアプリケーションをフォークできます。 heroku forkを使用して、アドオン、構成変数、HerokuPostgresデータなどの既存のアプリケーションをコピーします。

Herokuの指示に従ってください: https://devcenter.heroku.com/articles/fork-app

0
user3140089