加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 04:14:38 所属栏目:百科 来源:网络整理
导读:我正在考虑将 Ruby on Rails用于我的下一个项目.了解rails网站的部署很容易理解(听起来我会使用 Phusion Passenger) 但现在我想弄清楚数据库.我看到很多关于“数据库迁移”的内容,它允许我使用ruby代码更新数据库.我也看到我可以创建这些迁移的上下变体. 但
我正在考虑将 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这样的宝石来为您的应用程序填充演示数据以进行测试.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读