可以rake db:schema:加载而不擦除数据库

时间:2012-04-12 17:51:03

标签: ruby-on-rails migration

我一直在使用我的开发数据库,​​并准备将其转移到生产环境中。我在rails之外做了一些编辑,所以我没有迁移所有的更改。我知道我可以rake db:schema:dump生成schema.rb文件,但是我可以将其应用于已经填充的生产数据库而不擦除数据吗?类似于rake db:schema:load而没有擦除数据的东西?

如果没有,我是否只需要手动创建可以捕获生产数据库的迁移?如果我确实进行了这些迁移,那么以后调用开发框上rake db:migrate的所有调用都不会失败,因为迁移中的更改已存在于dev db中吗?

1 个答案:

答案 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没有从源代码控制中的内容发生变化。