这里有一个非常简单的问题——如果随着应用程序变得越来越复杂,迁移会变得缓慢而繁琐,如果我们可以调用更干净的rake db:schema:load
,那么迁移为什么会存在呢?
如果上述问题的答案是迁移用于版本控制(逐步记录数据库的更改),那么随着应用程序变得更复杂,rake db:schema:load
的使用也越来越多,它们是否继续保持其主要功能?
注意:
从这个问题的答案来看:rake db:schema:load
将删除生产服务器上的数据,所以使用时要小心.
这里有一个非常简单的问题——如果随着应用程序变得越来越复杂,迁移会变得缓慢而繁琐,如果我们可以调用更干净的rake db:schema:load
,那么迁移为什么会存在呢?
如果上述问题的答案是迁移用于版本控制(逐步记录数据库的更改),那么随着应用程序变得更复杂,rake db:schema:load
的使用也越来越多,它们是否继续保持其主要功能?
从这个问题的答案来看:rake db:schema:load
将删除生产服务器上的数据,所以使用时要小心.
迁移为数据库提供向前和向后的步骤更改.在生产环境中,在部署过程中必须对数据库进行增量更改:迁移为该功能提供了回滚故障保护.如果在生产服务器上运行rake db:schema:load
,最终将删除所有生产数据.这是一个危险的习惯.
尽管如此,我认为偶尔"崩溃"迁移是一种体面的做法.这需要删除旧的迁移,用单个迁移(非常类似于您的schema.rb
文件)替换它们,并更新schema_migrations
表以反映此更改.Be very careful when doing this! You can easily delete your production data if you aren't careful.
作为补充说明,我坚信您永远不应该将数据创建放在迁移文件中.seed.rb
文件可以用于此任务,也可以用于定制rake或部署任务.将其放入迁移文件会将数据库模式规范与数据规范混为一谈,并且在运行迁移文件时可能会导致冲突.