【发布时间】:2014-06-07 14:54:11
【问题描述】:
我正在重构一个大型 Rails 应用程序,并对一个相当神秘的数据库结构进行大量更改。这包括删除大量表和模型,将数据放入数据库的其他部分。
为了使情况更清楚,假设我将数据从不必要的user_level 表移动到user 表中。到目前为止我所做的是:
-
创建一个迁移,将
access_level列添加到user表中,然后执行以下操作:User.all.each 做 |u| u.access_level = u.user_level.level 结束
运行该迁移。将其检入 git。
- 从
user.rb中删除user_level模型和关联。检查到 git。 - 创建一个删除
user_level表的迁移。运行它并将其检入 git。
这在开发中运行良好,但我不知道如何将其部署到生产服务器。目前我们相当不优雅的部署过程是在服务器上运行git pull,然后执行任何db:migrates 或类似的需要。但是如果我们这样做,当我们 git pull 更新代码到 head 然后尝试迁移时,UserLevel 模型不再存在,因此u.user_level.level 将失败。 (我愿意使用 Capistrano 之类的东西,但我不知道在这种情况下这是否会有所帮助。)
如果有一种方法可以依次检查每个 git 提交并在每个提交后运行 db:migrate,这一切都会完美无缺,但我不知道该怎么做,我敢肯定这一定是无论如何解决了问题。我该怎么做?
【问题讨论】:
标签: ruby-on-rails git capistrano database-migration