1

Rails での移行について質問があります。通常、列をモデルに追加したい場合は、余分な移行を行わず、代わりに次の手順を実行します。

  rake db:rollback 

次に、db/migrations の移行ファイルを変更して、再実行します。

  rake db:migrate

最大の問題は、これを行うとデータが失われることです。以前、たとえばコマンドラインから移行を書きました

  rake g migration Add_Column_House_to_Users house:string

このアプローチの問題は、後で db/migrations フォルダーが非常に大きくなり、あまり明確にならないことです! 最後に、オブジェクトが持つ変数がわからないということです。私はレールの専門家ではないので、移行の概要を把握する方法を教えてください!よろしくお願いします

4

2 に答える 2

1

db:rollback既存のデータを含むテーブルでは絶対に使用しないでください。

大量のデータを含むいくつかの実稼働用の RonR アプリがあり、移行テーブルには 100 以上のエントリがあり、新しい移行を微調整テーブルに追加するのがRails のやり方です。明快とはどういう意味かわかりませんが、スキーマとデータモデルは時間の経過とともに変化しますが、それは問題ありません。

1 つのヒント。移行は素晴らしいですが、それらはほんの始まりにすぎません。既存のデータを修正するために必要に応じて複雑なロジックを含めることができます (そのように)

既存のテーブルのデータの変更:

def up
    add_column :rsvps, :column_name_id, :integer
    update_data
end

def update_data
    rsvps = Rsvp.where("other_column is not null")
    rsvps.each do |rsvp|
        invite = Blah.find(rsvp.example_id)
        ...
        rsvp.save
    end
end

もう 1 つのヒント: 運用データベースを頻繁にバックアップしますが (とにかくこれを行う必要があります)、展開する前にすべての移行をテストするために使用してください。私は、ローカル テストのために常に次のようなスクリプトを実行しています。

mysql -u root -ppassword
drop database mydatabase_dev;
create database mydatabase_dev;
use mydatabase_dev;
source /var/www/bak/mydatabase_backup_2013-10-04-16.28.06.sql
exit

rake db:migrate
于 2013-10-28T22:21:30.743 に答える