我以前听说过 Rails 迁移存在缺陷,但直到最近我才真正亲身经历过任何这样的例子。我现在意识到,如果迁移依赖于代码的特定状态,那么如果您尝试在两年后克隆存储库并运行所有迁移(就像很多迁移一样),那么您就会遇到麻烦其中取决于旧版本的代码)。
我认为这家伙有一个好主意:
http://www.mattdipasquale.com/blog/2011/02/28/rails-model-safe-migrations/
有没有这样的东西:一个 gem(比如说)来自动检查添加每个迁移的提交,一直到 HEAD?
显然,这不会是一个万无一失的系统,因为它确实依赖于每次迁移在提交到存储库时都可以从干净的石板合法地进行(我可以想象团队编写的迁移仅顺便说一句基于他们对数据库所做的事情完全在版本控制之外)。但这肯定比什么都没有好。
最佳答案
我认为可能会发生两种情况,每种情况的解决方案都不同:
您开发代码并以较小的发布增量交付它。该解决方案在某处运行,其中有数据,每次交付新版本时都必须迁移它。
==> Rails 是如何开发和交付新版本的完美答案。我一直这样做(有 2 个应用程序,其中我是唯一的用户),并且从未遇到过问题。
您开发代码,并交付许多小版本(使用第一种方法)。然后,您希望在新服务器上实例化它,而不在那里存储任何数据。
==> 然后转储您的方案并将其加载到新服务器上是最好的方法,只是为了确保一切都就位。
我不知道 Capistrano,也许有其他选择可以做到这一点。因此,如果您有类似场景 1 的情况,请使用 Rails 方法,如果是场景 2,请使用转储和加载方法。
关于ruby-on-rails - 是否有一个 gem 可以让 Git 和 Rails 协同工作以实现更强大的迁移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9853307/