使用Gerrit进行Ruby on Rails数据库部署

我正在考虑为我的下一个项目使用Ruby on Rails。 了解部署一个rails网站很容易理解(听起来像我将使用Phusion Passenger)

但现在我试图找出数据库。 我看到很多关于“数据库迁移”的信息,这些信息允许我使用ruby代码更新数据库。 我也看到,我被允许创建这些迁移的向上向下变体。

但是,我只能看到这个方向是干净的。 想象一下,如果我突然说“颜色列不能为空”。 所以, up会使它成为必需的,并给所有NULL条目一个默认值。 但下行会做什么? 如果你关心它和它的启动方式相同,你不能只将默认值设置为NULL。

这对于产品发布并不重要。 这可能只是在一个方向上完成( 向上的方向)。 不过,我想使用Gerrit进行代码评论,并且在允许签入之前设置一个bot来运行构建...

那么这怎么可能呢? 从一个代码审查到下一个代码审查,构建服务器将检出新的一组代码,并运行迁移? 但是,如果发生这种情况,它甚至不会保留之前的迁移代码,那么它如何执行下面的步骤呢? 作为一个更简单的例子,我没有看到如何检查旧版本的代码和向后“db迁移”。


是的,您无法检出旧版本的代码,然后从较新版本的代码运行向下迁移。 在回滚到旧代码之前,您需要运行向下迁移。

有很多很多情况下,下移是不实际或不可行的。 这不一定是坏事。 这只意味着你已经定义了一个“不返回点”,你不能将数据库恢复到以前的状态。

通过简单地销毁该表或删除该列,可轻松颠倒诸如创建表或添加列之类的迁移。 但是,如果您正在做更复杂的事情,比如添加默认值或移动数据,那么您可以告诉Rails无法逆转此迁移:

def down
  raise ActiveRecord::IrreversibleMigration
end

我建议Gerrit不应该假设数据库。 每次部署新版本时,应该从新数据库开始,然后运行db:migrate以运行所有迁移。 您可以使用像factory_girl这样的宝石来为测试目的填充演示数据。

链接地址: http://www.djcxy.com/p/11343.html

上一篇: Ruby on Rails Database Deployment with Gerrit

下一篇: Mocking Postgres for unit tests with Sinon.js in Node.js