2

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

如果没有,我是否只需要手动创建能够赶上生产数据库的迁移?如果我确实进行了这些迁移,那么将来rake db:migrate对 dev 框的所有调用是否都会失败,因为迁移中的更改已经存在于 dev db 中?

4

1 回答 1

3

问题rake db:schema:load在于它将强制创建表,您可以在以下位置看到db/schema.rb

create_table :users, :force => true do |t|
  # etc
end

我建议您创建缺少的迁移。schema_migrations您可以通过手动将时间戳添加到表中来修复本地开发数据库。这就是手动更改架构的结果。

我个人始终确保rake db:migrate:reset(删除所有表并从头开始迁移)将产生相同db/schema.rbrake db:schema:dump结果。数据库模式中的任何更改都必须通过迁移自动化。您甚至可以通过运行rake db:migrate:reset而不是断言它db/schema.rb与源代码控制中的内容没有变化,从而使其成为 CI 脚本的一部分。

于 2012-04-12T20:21:59.660 回答