2016-05-21 14 views
1

gem yaml_dbを使用して私のPostgres開発データベースをプロダクションにエクスポートします。これは、Ruby on Railsアプリケーションがある仮想マシン上にあります。開発から本番へのデータベースのエクスポート

data.ymlを作成するのにrake db:data:dump RAILS_ENV=developmentを使用していますが、データをインポートするのにrake db:data:load RAILS_ENV=productionを使用していますが、インポート時にエラーが発生しています。

rake aborted! 
ActiveRecord::StatementInvalid: PG::InFailedSqlTransaction: ERROR: current transaction is aborted, commands ignored until end of transaction block 
: DELETE FROM "improvement_actions" 

PG::FeatureNotSupported: ERROR: cannot truncate a table referenced in a foreign key constraint 
DETAIL: Table "comments" references "improvement_actions". 

これを解決する方法を知っている人はいますか?または、データベースをエクスポートする別の方法がありますか?

答えて

1

データベースに外部キーがあり、yaml_dbがサポートしていないため、このエラーが発生します。

最も簡単な解決策はpg_dumpを使用して--disable-triggersフラグを使用して開発データベースをエクスポートし、pg_restoreを使用して本番データベースにインポートすることです。

しかし、実際にyaml_dbを使用する場合は、rather complicated solution has been documentedです。その解決策の中心点は、deferrable initially immediateがまだない場合は

  • です。文書化されたソリューションはschema_plus gemを使用するか、Postgresで行うことができます。
  • モンキーパッチyaml_dbのSerializationHelper::Base#loadは、いつものように切り捨てるしようとする(トリガを遅らせたテーブルで許可されていない)と削除することによって、テーブルを切り捨てることset constraints all deferred;
  • サルパッチyaml_dbのSerializationHelper::Base#truncate_tableと各負荷トランザクション中にすべての制約を延期します切り捨てが失敗した場合。
+0

私はちょうどいくつかのチュートリアルでそれを見たので、yamlで試しました。 pg_dumpとpg_restoreを使用して、ローカルホストと仮想マシンの間でどうすればいいですか? – terrorista

+0

正確な詳細はもちろんホストによって異なりますが、通常はscpを使用してVMにダンプをコピーし、sshを使用してVMにログインし、pg_restoreを実行します。 –

+0

VMが使用するデータベースが開発マシンから直接アクセスできる場合は、ラップトップでpg_restoreを実行し、VMのデータベースをポイントすることができます。セキュリティ上の理由から、外部からアクセスできない可能性があります。 –

関連する問題