1

我对我在 Rails 中的迁移有疑问。通常,当我想为模型添加一个列时,我不会进行额外的迁移,而是执行以下步骤:

  rake db:rollback 

接下来我更改 db/migrations 中的迁移文件并重新运行:

  rake db:migrate

最大的问题是,当我这样做时,我会丢失我的数据。以前我从命令行编写了迁移,例如

  rake g migration Add_Column_House_to_Users house:string

这种方法的问题是我的 db/migrations 文件夹之后变得非常大而且不是很清楚!我的意思是最后我不知道对象有哪些变量!我不是 Rails 专家,想问你如何保持对迁移的概述!谢谢

4

2 回答 2

2

只是一个小想法 - 我只是使用文件 db/migrate/schema.rb 来确定数据库中的内容,而不是跟踪迁移

于 2013-10-28T23:13:12.277 回答
1

您绝对不应该db:rollback与包含现有数据的表一起使用。

我有一些带有大量数据的生产 RonR 应用程序,迁移表中有 100 多个条目,向调整表添加新迁移是Rails做事的方式。不知道你所说的 lucid 是什么意思,但你的模式和数据模型会随着时间的推移而改变,这是可以预期的。

一个提示。迁移很棒,但它们只是开始,您可以根据需要包含复杂的逻辑来修复现有数据(就像这样)

更改现有表中的数据:

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

另一个提示:经常备份您的生产数据库(无论如何都应该这样做),但在部署之前使用它来测试所有迁移。我一直运行这样的脚本进行本地测试:

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 回答