【发布时间】:2020-10-13 07:20:45
【问题描述】:
我们正在 Heroku 上运行我们的堆栈。我们正在使用带有 Postgres 11 DB 的 Django 2.2。我们的构建管道(Github Actions)推送到 Heroku(git push https://git.heroku.com...),然后立即运行迁移(heroku run python manage.py migrate --app heroku-app-name)。所有这些都与 Postgres 9.6 数据库一起工作,并且仍在我们的暂存环境(Postgres 11)中工作。现在,在 Postgres 11 上进行生产时,django migrate 命令只是卡住了,不会产生任何输出,即使没有实际的迁移可以应用。
我们的生产设置和我们的暂存设置之间的唯一区别是生产中连接到主数据库和“生产工作负载”的追随者/从属。
为了修复该部署,我必须运行一个
heroku pg:killall -a heroku-app-name
heroku restart -a heroku-app-name
此时构建管道中的迁移任务失败。
之后可以毫无问题地手动应用迁移:
heroku run python manage.py migrate --app heroku-app-name
所以由于某种原因,迁移命令正在“等待”某些东西,一些数据库锁或其他东西,但我无法确定它。对我来说特别奇怪的是,它也卡在没有应用迁移的地方。为什么会卡在那里?
【问题讨论】:
-
自从我们将 Postgres9 迁移到 Postgres11 后,我们面临着完全相同的问题。尚未找到解决方案。
-
好吧,不只是我们。如果我找到解决方案,我会及时通知您。
-
我在内部等待一个新的事件来分析锁本身。如果你已经有了这个,你能列出数据库中的锁吗?也许你会在这个级别看到一些东西。
-
我们现在已经为我们解决了这个问题。我在下面留下了回复。提示我的事情是在我们部署新版本的日期看到数据库备份失败。有关详细信息,请参见下文。
标签: django postgresql heroku