如何使用不同的数据库为Heroku审查应用程序



我在Heroku上有一个部署管道,最近开始使用审查应用程序。这意味着我有一个应用程序——让我们称之为CI-APP——它是从主分支创建的。

每次发出拉取请求时,都会创建一个审核应用程序。我们在项目中使用Django,所以我还在项目的release阶段添加了migrate命令,以便数据库迁移可以自动完成。

今天,一个同事提交了一个包含一些数据库更改的pull request。问题是迁移已经运行,并且由于审查应用程序似乎正在使用与他们应该合并到的应用程序相同的数据库,因此应用了迁移,现在我的应用程序CI-APP停止工作…因为代码库不再匹配数据库结构。

与父应用程序相比,我搜索了很多关于如何使用完全不同的数据库用于审查应用程序,但无济于事(有一些资源提到如何复制db内容,但这不是我需要的)。

有什么建议吗?

更新

Ok,所以看起来Heroku确实为审核应用程序创建了一个新的数据库,然而:审核应用程序从父应用程序复制其所有的环境变量,包括DATABASE_URL(这似乎是实际创建审核应用程序的唯一方法:https://s3.amazonaws.com/heroku-devcenter-files/article-images/1461071037-initial_set_up_review_apps.png)

我想我可以在postdeploy脚本中做一些黑魔法,但由于数据库生成的url可以是HEROKU_POSTGRESQL_{color}_URL之类的东西,我不确定如何找到它....

要做到这一点,在项目的根目录创建app.json文件,而不是使用heroku仪表板。在这个文件中,您可以指定从父环境变量继承哪些环境变量。

From the heroku docs:

"env": { "INHERIT_THIS_CONFIG_VAR": { "required": true }, "DONT_INHERIT_THIS_CONFIG_VAR": "production" },

这允许你指定你想要使用哪个数据库的审查应用程序。查看文档的heroku postgres插件(我假设你正在使用postgres):

作为配置过程的一部分,将使用DATABASE_URL配置变量添加到应用程序的配置中。这包含了你的应用程序使用的URL访问数据库。

所以database_url配置变量将由插件创建。你只需要不把它放在app.json文件中,它就会自动创建。

检查您在Heroku的Pipeline Settings CONFIG VARS中也没有设置DATABASE_URL。如果它设置在那里,那么似乎评论应用程序将使用它作为DB链接,而不是在创建评论应用程序时创建的链接。

最新更新