私は現在、Rails の存在を知る前に設計されたデータベースを使用して Rails アプリケーションを開発しています。
現在、いくつかの新しいテーブルと新しい列を既存のテーブルに追加するための移行をいくつか作成しました。
完全なデータベースを再作成するための移行が必要です。
どの手順に従う必要がありますか?
すべての移行を手動で作成する必要がありますか?
EDIT:データベースの内容ではなく、データベーススキーマに興味があります
私は現在、Rails の存在を知る前に設計されたデータベースを使用して Rails アプリケーションを開発しています。
現在、いくつかの新しいテーブルと新しい列を既存のテーブルに追加するための移行をいくつか作成しました。
完全なデータベースを再作成するための移行が必要です。
どの手順に従う必要がありますか?
すべての移行を手動で作成する必要がありますか?
EDIT:データベースの内容ではなく、データベーススキーマに興味があります
PHP アプリケーションを Rails に移植したときに、まさにこの問題が発生しました。私たちがしたことは、tomtoday の提案に似ています。まず、レール構成を現在のデータベースに向けました。次に、rake db:schema:dump を実行し、db/schema.rb ファイルを db/schema_base.rb などにコピーしました。次に、そのスキーマをロードして最初の移行を行います。例えば:
class CreateTables < ActiveRecord::Migration
def self.up
`cp #{Rails.root}/db/schema_base.rb #{Rails.root}/db/schema.rb`
Rake::Task['db:schema:load'].invoke
end
def self.down
end
end
これを強制的に最初の移行にするだけで、すぐに開始できます。次に、マイグレーションの作成を開始して、データベースを変換して、Rails の方法により準拠できるようにします。id 列、外部キーの関係、テーブル名などを適切に名前変更するための移行を作成しました。
スキーマ ダンプは、外部キーの制約とトリガーを使用する場合、それらをサポートしていないことに注意してください。
これには手作業が必要になると思います。
rake db:schema:dump
プロジェクトにファイルがない場合は、実行することから始めることができdb/schema.rb
ます。db/schema.rb
移行を使用している場合は、おそらくすでにファイルがあります。そのファイルには、開発用に構成したデータベースのルビー表現が含まれます。別のデータベースのruby表現を取得するには、RAILS_ENVをrakeコマンドに渡します(つまりRAILS_ENV=production rake db:schema:dump
)
次に、そのschema.rb
ファイルを開始点として使用して、既存のテーブルを再作成する新しい移行を作成できます。新しい移行ファイルを作成するときは、他の移行の前に実行されるような名前になっていることを確認してください。
短い答え: はい
長い答え: データベースのセットアップ方法と、現在のデータベースとの違いによって異なります。また、ID は動的に生成されると想定しているため、あるテーブルから別のテーブルに移動する場合は、すべての外部キーが正しく更新されていることを確認してください。
古いデータから DB 全体を再作成するスクリプトを作成します。DB スキームと新しい DB スキームを投稿した場合は、喜んでお手伝いさせていただきます :)