在Rails中转换数据库结构/数据

时间:2009-05-17 14:37:24

标签: ruby-on-rails migration

这是对此问题的跟进:Can Rails Migrations be used to convert data?

如果我正在开发一个分支,当它重新集成并发布到生产环境时,将彻底改变数据库模式。确保生产中的所有数据都转换为新格式的最佳方法是什么?

一个简单的例子是,有一个数字列我们想要更改为文本并对数据进行一些转换工作。然后我们要删除旧列。

我被告知不要在迁移中进行任何数据操作,而是为此创建rake任务。是否有一种机制可以确保rake任务可以与迁移一起运行?

现在,我能想到的唯一解决方案是将所有将已解散列删除的迁移捆绑到第二个集合中。运行添加新表的第一组迁移。运行rake任务,然后运行第二组迁移。这对我来说似乎不是一个理想的解决方案,很容易出错。

1 个答案:

答案 0 :(得分:2)

迁移正是为了这种东西。无论是否有架构更改,在数据库中为新版本的应用程序转换数据都应该是一次迁移。这可以保证在新版本的应用程序上线之前在生产中完成新的更改。

当您在分支机构工作时,只需创建一个新的迁移,它将创建一个新的带时间戳的文件。当您合并回发布分支时,文件将被复制。由于时间戳,迁移将(可能)以正确的顺序执行。

如果您正在进行的转换将继续执行,那么您应该使用Rake任务。