我之前听说Rails迁移存在缺陷,但直到最近我才真正体验过这种直接的例子。我现在意识到,如果迁移依赖于代码的特定状态,那么如果您尝试在两年后克隆回购并运行所有迁移(很多时候),则会遇到麻烦它们将取决于旧版本的代码。)
我认为这个人有个好主意:
http://www.mattdipasquale.com/blog/2011/02/28/rails-model-safe-migrations/
有没有这样的东西:一个gem(比如说)自动检查添加每个迁移的提交,一直到HEAD?
显然,它不会是一个万无一失的系统,因为它确实依赖于每一次移植都是合法可能的,从一个干净的平台到它的回购点(我可以想象团队只有书面迁移的情况) 偶然基于他们完全在数据库控制之外完成的事情而工作。但它肯定会比什么都好。
答案 0 :(得分:1)
我认为有两种情况可能发生,并且在每种情况下,解决方案都不同:
您开发代码并以小的发布增量交付。解决方案在某处运行,其中包含数据,并且每次交付新版本时都必须迁移它。
==>因此,Rails是如何开发和交付新版本的完美答案。我一直这样做(有2个应用程序,我是唯一的用户),从来没有遇到过问题。
您开发代码,并提供大量小版本(使用第一种方法)。然后,您希望在新服务器上实例化它,而不存储任何数据。
==>然后转储您的方案并将其加载到新服务器上是最好的方法,只是为了确保一切都到位。
我不知道Capistrano,也许有不同的选择。因此,如果你有类似方案1的东西,使用Rails方法,在方案2的情况下,使用dump-and-load方法。
答案 1 :(得分:1)
很有理由对数据库schema.rb进行版本控制。
git changelog将显示schema.rb何时更改,并为您提供提交哈希。