0

我定期需要一个脚本来清理或调整 Rails 应用程序中的部分数据库。这通常是迁移或准备迁移的结果。

例如,最近我向表中添加了一个显式rank列以启用显式排序而不是按字母顺序排序。添加排名列后,我需要为现有数据填充它。这需要一个脚本来加载现有数据、确定排名并将它们保存到数据库中。有很多例子需要这样的脚本。

问题是,如何处理这些脚本,以便顺利部署到生产环境。我通常将它们编写为迁移,但我经常遇到迁移中的代码在编写时运行良好的问题,但是当它稍后作为部署的一部分运行时,由于各种原因它会中断。最近一次是由于 before_save 回调引用了在运行迁移时尚未添加的列,因为它是较旧的迁移。

似乎可能有几种策略:

策略 1:分阶段部署。因此,如果有两个提交 A 和 B 包含在部署进一步提交之前需要运行的迁移,您将部署到 A,然后运行迁移,然后部署到 B,然后再次运行迁移,最后部署所有通往 HEAD 的道路。

策略 2:不要在迁移中使用任何 AR 代码,一切都使用 SQL。但有时 AR 实在是太有用了。

策略3:其他一些我不知道的技巧。

人们做什么?在这种情况下,最佳做法是什么?

4

1 回答 1

2

通常不赞成在迁移中使用模型。但它总是出现,我昨天才遇到同样的问题。

http://guides.rubyonrails.org/migrations.html#using-models-in-your-migrations

在迁移中使用模型时,它是一个非常有用的指南,尤其是关于在迁移中定义模型的部分。

编辑:链接不起作用。新链接: http: //guides.rubyonrails.org/v3.2.8/migrations.html#using-models-in-your-migrations

可能不是您的版本,但适用相同的规则。

于 2013-10-18T16:50:12.660 回答