我一直在使用我的开发数据库,并准备将其转移到生产环境中。我在rails之外做了一些编辑,所以我没有迁移所有的更改。我知道我可以rake db:schema:dump
生成schema.rb文件,但是我可以将其应用于已经填充的生产数据库而不擦除数据吗?类似于rake db:schema:load
而没有擦除数据的东西?
如果没有,我是否只需要手动创建可以捕获生产数据库的迁移?如果我确实进行了这些迁移,那么以后调用开发框上rake db:migrate
的所有调用都不会失败,因为迁移中的更改已存在于dev db中吗?
答案 0 :(得分:2)
rake db:schema:load
的问题在于它会强制创建表格,您可以在db/schema.rb
中看到:
create_table :users, :force => true do |t|
# etc
end
我建议您创建缺少的迁移。您可以通过手动将时间戳添加到schema_migrations
表来修复本地开发人员数据库。这是手动更改架构的结果。
我个人总是确保rake db:migrate:reset
(删除所有表并从头开始迁移)将产生与db/schema.rb
相同的rake db:schema:dump
。必须通过迁移自动更改数据库模式中的任何更改。您甚至可以通过运行rake db:migrate:reset
使其成为CI脚本的一部分,而不是断言db/schema.rb
没有从源代码控制中的内容发生变化。