Heroku 上的 Django 部署,升级到 Cedar-14,导入设置错误

Posted

技术标签:

【中文标题】Heroku 上的 Django 部署,升级到 Cedar-14,导入设置错误【英文标题】:Django deployment on Heroku, upgrading to Cedar-14, Import Settings Error 【发布时间】:2018-03-01 18:40:50 【问题描述】:
ImportError: Could not import settings 'settings.prod' (Is it on sys.path? Is there an import error in the settings file?)

我在 2013 年至 2014 年构建了这个应用程序,从那时起就没有进行过多的维护。但是现在有一个问题,需要更改一些 AWS 密钥,但我无法部署应用程序。

git push heroku master 导致构建失败,除非我这样做

heroku config:set DISABLE_COLLECTSTATIC=0

所以,我这样做了,知道它可能会破坏站点,但它甚至没有达到那个地步,因为后来我发现在升级到 Cedar-14 之前我无法部署。好的,所以我这样做,然后推送,然后我在每个测功机上都会收到 ImportError。

app/web.1: ImportError: Could not import settings 'settings.prod' (Is it on sys.path? Is there an import error in the settings file?): cannot import name _uuid_generate_random

app/celerybeat.1: ImportError: Could not import settings 'settings.prod' (Is it on sys.path? Is there an import error in the settings file?): cannot import name _uuid_generate_random

app/celeryd.1: ImportError: Could not import settings 'settings.prod' (Is it on sys.path? Is there an import error in the settings file?): cannot import name _uuid_generate_random 

所以我读到here 我需要更新 Kombu。好的,所以我这样做。现在同样的问题,但在错误结束时,我看到了这个:

cannot import name ResourceError

我已经用谷歌搜索过,所以在任何地方都找不到关于这个错误的太多提及,如果我添加 Heroku,我得到的结果为零。上次搜索错误代码返回零结果是什么时候?

我唯一能想到的是我正在运行一个非常旧版本的 gunicorn,gunicorn==0.14.6,但我不能 100% 确定升级会做什么,我需要解冻哪些其他依赖项和更新,或者我应该在 Heroku Procfile 中使用的新命令应该是什么,因为 gunicorn_django 命令已被弃用并删除。

任何关于如何最好地更新此应用的想法,以便我可以部署一个简单的设置更改,将不胜感激。

这是 Procfile,以防它为错误提供任何额外的上下文:

web: gunicorn_django -b 0.0.0.0:$PORT -w 9 -k gevent --max-requests 250 --preload settings.prod
celeryd: python manage.py celeryd -E -B --loglevel=INFO --settings=settings.prod
celerybeat: python manage.py celerybeat -S djcelery.schedulers.DatabaseScheduler --settings=settings.prod

【问题讨论】:

【参考方案1】:

回答我自己的问题。

首先将this post 归功于mrooney,这让我找到了正确的地方。问题是 Kombu,但更新这个库会把我带到依赖地狱,每次升级都会导致其他一些依赖关系中断。

最初的问题是由于自动构建执行 collectstatic 但未使用我的 --settings=settings.prod 标志,因此执行 heroku config:set DISABLE_COLLECTSTATIC=0 是最初的正确操作。后续的问题都与最初的问题无关。幸运的是,我将所有静态文件都托管在 S3 上,因此不需要 collectstatic 命令。

mrooney 的建议是在设置文件中添加几行代码来捕获丢失的 _uuid_generate_random 函数,并分配一个默认值。我最终确实需要更新 gevent,但升级并没有破坏其他任何东西,之后,heroku 构建成功。

我想为 Heroku 的免费 PaperTrail 插件添加一个提示,如果没有它,我将完全不知道如何解决问题。如果你不使用它,我建议你开始。

胡德。

【讨论】:

以上是关于Heroku 上的 Django 部署,升级到 Cedar-14,导入设置错误的主要内容,如果未能解决你的问题,请参考以下文章

Django React -- Heroku 上的部署错误(找不到页面 404)

隐藏 Heroku Django 部署的 settings.py 密码

服务器错误(500)heroku 上的 Django 部署

数据库更改时,Heroku 部署的 Django 网页不会更新

尽管 SECRET_KEY 错误,但部署在 Heroku 上的 Django 应用程序仍然有效

Heroku Dyno 上的 Django 静态文件