4

私は数ヶ月前までアプリに取り組んでいました。その後、アプリの大幅な見直しが決定されました。これには、多くのデータベース スキーマの変更が含まれていました。目的を達成するために、別のブランチで作業することにしました。移行が必要になったとき、新しい db スキーマと互換性を持つように、データベースで利用可能な現在のデータを処理するコードを含めるのに苦労しませんでした。この開発は、数か月間このように進みました。ここで、古いデータベース スキーマからすべてのデータを取得し、新しいデータベース スキーマに移行する必要があります。

このような作業は、アドバイスを求めるほど複雑に思えます。これに役立つ宝石はありますか?ありがとう

4

1 に答える 1

0

まず、MySql のようなリレーショナル データベースを使用していて、管理可能な数のテーブルがあると仮定しています。

以下は、個別のステップを含む簡単な方法です。

テーブルごとに、

  1. インポートするテーブルごとに SQL クエリを記述します。各テーブルのインポートを一度に 1 つずつ、またはバッチで実行します。
  2. Rails コンソールで、モデルのインスタンス化を試みてデータを検証します。

ただし、この方法を使用すると、データ検証エラーが発生する可能性があります。

2 つ目の方法では、CSV を使用できます。ここでは、Ruby 1.9.3 で CSV を使用していると想定しています。古い Ruby では FasterCSV を使用するように切り替えることができます。

  1. データベースを CSV にエクスポートします。
  2. rake タスクでは、いくつかのデータを手動でマッピングすることができます:

    # Put this in lib/tasks/import.rb
    require 'csv'
    
    namespace :import do
      desc 'import some data!'
      task :from_csv do
        CSV.foreach('path/to/file.csv') do |row|
          model = YourNewModel.new(field_xyz: row[xyz], ...)
          # ... maybe do some other stuff here if you need to process anything
          model.save if model.valid? # maybe check if it's valid
        end
      end
    end
    

    ここではもちろん、モデル フィールドを CSV 行に正しくマッピングする必要があります。ここで 1.9.3 CSV ドキュメントを確認してください。

    次のように rake タスクを実行します。

    $ cd /path/to/your/app && rake import:from_csv
    
于 2012-08-02T05:09:15.907 に答える