我正在考虑在我的下一个项目中使用Ruby on Rails。理解Rails网站的部署足够简单易懂(听起来我将使用Phusion Passenger)。
但是现在我正在尝试弄清楚数据库。我看到了很多关于“数据库迁移”的内容,这使我可以使用ruby代码更新数据库。我还看到我可以创建这些迁移的向上(up)和向下(down)变体。
然而,我只能想象这在单个方向上如何干净地工作。想象一下,如果我突然说“颜色列不能为空”。因此,向上(up)将使其为必填项并给所有空值条目赋予默认值。但是向下(down)会怎么做?如果您关心它与起始状态完全相同,您不能仅将默认值设置回NULL。
对于发布到生产环境,这实际上并不重要。那可能只会在一个方向(向上)进行操作。但是,我想使用Gerrit进行代码审查,并设置机器人在允许检入之前运行构建...
那么它该如何工作呢?从一个代码审查到下一个,构建服务器将检出新的代码集,并运行迁移?但是当这种情况发生时,它甚至不会保留之前的迁移代码,那么如何运行向下(down)步骤呢?作为一个更简单的例子,我不知道如何检出旧版本的代码并进行“db migrate”操作以后退。