我对我在rails中的迁移有疑问。 通常,当我想在模型中添加一个列时,我不进行额外的迁移,而是执行以下步骤:
rake db:rollback
接下来我在db / migrations中更改迁移文件并重新生成:
rake db:migrate
最大的问题是,当我这样做时,我会丢失数据。 以前我用命令行编写了迁移,例如
rake g migration Add_Column_House_to_Users house:string
这种方法的问题是我的db / migrations文件夹后来变得非常大而且不是很清楚!我的意思是最后我不知道对象有哪些变量!我不是rails的专家,想问你如何保持对迁移的概述!谢谢
答案 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