2017-06-27 15 views
1

私はRailsアプリケーションを1年間稼働させていました。今すぐデータベースを整備して、アプリケーションで新しい機能を実行できるようにしたい。これをすぐにHerokuにプッシュする予定だ。列や表の名前を追加、削除、変更するマイグレーションを作成するのではなく、新しいデータベースを作成して古いデータをそのデータベースに移動したいと考えています。Rails:ライブheroku postgresデータベースのオーバーホール

私はあまりのデータベースを知っていないので、私の考えは次のとおりです。

  1. は古いデータベース
  2. からCSVなどの重要なテーブルが新しいアプリ
  3. メイクに新しいデータベーススキーマを作成します。ダウンロードCSVは新しいDにHerokuのに生きて古いデータベースを削除します
  4. シードテーブルを
  5. プッシュ新しいアプリを新しいスキーマ
  6. と一致しますatabase
  7. ホープすべてが、これは良いアイデアです

に動作しますか?

アプリ1からアプリ2にデータベースを「アタッチ」することができます。別のアプリで新しいデータベースを作成し、そこにデータをシードして元のアプリに添付してプロモートするとオリジナルのデータベースは保管され、何か問題が発生した場合に再接続することができますか?

答えて

0

まず、ご使用のアプリケーションがmaintenance modeにライブプットアプリケーションである場合。

したがって、新しいデータベースの更新はありません。

元のアプリケーションからdbバックアップを取得し、ローカルマシンのどこかに保存します。データが必要なときはいつでも、あなたは適切なデータを持っています。

私の考えでは、新しい英雄インスタンスを作成し、元のデータベース をアップロードすることをお勧めします。そこにあるすべての機能をテストできるからです。

ローカル環境でも同じことができますが、ローカルモードでの変更はライブモードでは正しく動作しないことがあります。

新しいherokuインスタンスで新しいdbを変更し、アプリケーションをテストします。

変更に満足したら、新しく作成したdbを元のアプリケーションにコピーします。

メンテナンスモードをオフにすると、完了です。

0

あなたが、私は希望それを自動化する必要がありませんようだとして:すべての決定的なデータで、ローカルデータベースを準備

  • だけの場合
  • で生産DBのバックアップを作成します(あなたが使用することができますどんな方法であれ、あなたのcsvの方法を含めて正しいレコードを取得する方法はたくさんあります。私は通常、jsonモデルを作成してシードモデルに使うのが好きです)
  • 新しいアプリケーションの更新/作成
  • ローカルherokuのCLIを使用してdbをプロダクションに

新しいアプリスキーマはもちろん準拠する必要があります、あなたがからあまりにも多くのを迷っ新しいアプリまたは1で作業している場合ので、これは、PG-プッシュは良好である理由の一つでありますプロダクションブランチをマイグレーションなどで使用する場合は、ローカルブランチをプッシュして展開してから、本来のローカルのデータベースを本番環境にプッシュして同期させておくことができます。それにもかかわらず、Dbの "ローカル"バージョンを整えて準備が必要です。

new_hash_of_objects = { } 
Model_you_want.all.each do |model| 
    new_hash_of_objects[model.id.to_sym] = { 
    new_attribute_1 = '...', 
    new_attribute_2 = '...', 
    old_attribute_1 = model.old_attribute_1, 
    ... 
    } 
end 

File.open("somewhere/json_records/records.json","w") do |f| 
    f.write("#{new_hash_of_objects.to_json}") 
end 
:私は(心に留めておくあなたは、コンソールで実行できることを、どこかで、何かの方法としてこれを行う必要があります)のような何かをするだろう、部分的に既存のレコードからレコードを種子に

補遺

そして、あなたがそれらをバックロードするために何かを持つことができます:あなたは数百万行を持っている場合、これは重いかもしれませんので、あなたは小さなファイルにそれを分割する必要がある

def read_json_copy_of_months 
    @json = JSON.parse(File.read("somewhere/json_records/records.json")).as_json.with_indifferent_access 
    @json.each do |m,record| 
     Record.create!(record) 
     end 
    end 
    end 

を。

関連する問題