如何了解迁移概述?

时间:2013-10-28 22:05:32

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4

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

  rake db:rollback 

接下来我在db / migrations中更改迁移文件并重新生成:

  rake db:migrate

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

  rake g migration Add_Column_House_to_Users house:string

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

我有一些生产具有大量数据的RonR应用程序,并且迁移表中有100多个条目,并且添加新的迁移到调整表是 rails方式来做事情。不确定你的意思是清醒,但你的架构和数据模型会随着时间的推移而改变,这是可以预期的。

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

更改现有表格中的数据:

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