这里有一个非常简单的问题 - 如果迁移会随着应用程序变得越来越复杂而变得缓慢和繁琐,并且如果我们有更清洁rake db:schema:load的方法可以调用,那么为什么存在迁移?
rake db:schema:load
如果上述问题的答案是迁移用于版本控制(对数据库更改的逐步记录),那么随着应用程序变得越来越复杂并且rake db:schema:load被更多使用,它们是否继续保持其主要功能?
从这个问题的答案:rake db:schema:load 将删除 生产服务器上的数据,因此使用时要小心。
迁移为数据库提供了向前和向后的步进更改。在生产环境中,必须在部署期间对数据库进行增量更改:迁移为该功能提供了回滚故障保护。如果您rake db:schema:load在生产服务器上运行,您最终将删除所有生产数据。这是一个危险的习惯。
话虽如此,我相信偶尔“崩溃”迁移是一种体面的做法。这需要删除旧迁移,用单个迁移替换它们(与您的schema.rb文件非常相似)并更新schema_migrations表以反映此更改。 这样做时要非常小心! 如果您不小心,您可以轻松删除您的生产数据。
schema.rb
schema_migrations
附带说明一下,我坚信您永远不应该将数据创建放在迁移文件中。该seed.rb文件可用于此,或自定义 rake 或部署任务。将其放入迁移文件中会使您的数据库模式规范与数据规范混合在一起,并可能在运行迁移文件时导致冲突。
seed.rb