4

いくつかの(古い)Drupalサイトがあり、1つの新しいRailsアプリに置き換える必要があります。その新しいサイトには、すべての古いDrupalコンテンツが含まれている必要があります。その古いDrupalコンテンツは部分的に壊れています(7年近くの醜いアップグレード、廃止されたモジュールなどのため)。Drupalであるという事実はほとんど関係がなく、いくつかの不整合、奇妙な命名、および不適切に正規化されたテーブルを引き起こすという事実だけです。

Railsアプリにインポートする必要のあるコンテンツは単純です。コンテンツ(ブログエントリ)、添付ファイル(画像)、コメントです。2つのデータベースが「古くなっている」(本番環境ではない)、さらに2つのデータベースが本番環境にあるという贅沢がありますが、しばらくの間(数時間、数日)ダウン/ロックされます。したがって、移行の速度を最適化する必要はなく、完全に保存する必要もありません(つまり、移行の実行中に投稿されたコメントを失う余裕があります)

Rails(3)アプリはほとんどが実行され、Active-recordの規則のみを使用します。

制約(壊れた、一貫性のないデータベース、マージが必要ないくつかのデータベース)のために、新しいRailsアプリを醜い、一貫性のないレガシーデータベースに接続するのではなく、このための移行を作成することを好みます。

私の質問は次のとおりです。

  • Railsへのインポートを容易にする環境、gem、またはツールはありますか?たとえば、一部のDSLで新旧からの単純なマッピングを可能にするものはありますか。
  • または、移行を完全にSQLで記述する方が簡単ですか?古いデータをRailsアプリに適合する構造に変換するSQLクエリですか?移行はMySQL->MySQLからです。
  • または、Activerecordを古いデータベースに接続し、各行/結果をループしてObject.saveを実行する必要があります。私のRailsアプリで?
4

1 に答える 1

1

興味深いケースです。現在のプロジェクトで同じ問題に直面しています。

2番目の点を考慮する必要があると思います!

それとも、マイグレーション全体を SQL で記述する方が簡単ですか? 古いデータを Rails アプリに適合する構造に変換する SQL クエリですか? 移行は MySQL->MySQL からです。

古いデータベースから新しいデータベースにデータをインポートするための SQL 移行を記述してから、新しいスキーマで作業してください! 古いデータベースごとに INSERT クエリのリストを含むダンプ SQL ファイルがあるとします。

したがって、このための戦略は次のようになります。

  1. 新しいスキーマから、古いデータベース スキーマのテーブルごとに 1 つの SQL ビューを作成します。
  2. ビューに対してこれらの INSERT を実行します。

最初に、適切な検証/関連付けを使用してすべてのモデル レイヤーを基本的に生成するlegacy_data gem について説明するつもりでしたが、Rails アプリケーションに必要なモデルがすべてセットアップされていることを考えると、これは役に立ちません。

于 2011-03-13T14:22:47.447 に答える