ruby-on-rails – 使用Gerrit进行Ruby on Rails数据库部署

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

但现在我想弄清楚数据库.我看到很多关于“数据库迁移”的内容,它允许我使用ruby代码更新数据库.我也看到我可以创建这些迁移的上下变体.

但是,我只能理解它如何在一个方向上干净利落地工作.想象一下,如果我突然说“颜色列不能为空”.因此,up将使其成为必需并为所有NULL条目提供认值.但是下来会做什么?如果您关心它与它的启动方式相同,则不能将认值设置回NULL.

这对于发布到生产来说并不重要.这可能只是在一个方向上完成(向上).但是,我想使用Gerrit进行代码审查,并在允许签入之前设置机器人来运行构建…

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

解决方法

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

在许多情况下,向下迁移是不切实际或不可能的.这不一定是坏事.它只是意味着您已经定义了一个“不返回点”,您将无法将数据库恢复到早期状态.

只需销毁该表或删除该列,即可轻松撤消创建表或添加列等迁移.但是,如果您正在执行更复杂的操作,例如添加认值或移动数据,那么您可以告诉Rails,无法撤消此迁移:

def down
  raise ActiveRecord::IrreversibleMigration
end

我建议Gerrit永远不要假设有关数据库的任何内容.每次部署新版本时,它应以新数据库开始,并运行db:migrate以运行所有迁移.您可以使用像factory_girl这样的宝石来为您的应用程序填充演示数据以进行测试.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...