gpt4 book ai didi

python - 在 cloudControl 部署中调试 Django `collectstatic` 时出现问题

转载 作者:行者123 更新时间:2023-12-01 04:46:09 27 4
gpt4 key购买 nike

我有一个 Django 应用程序部署到 cloudControl。配置是标准的,推送/部署不会出现(明显的)错误。

但是collectstatic step没有被执行:它默默地失败(我没有看到 -----> Collecting static files 消息)。部署后,应用程序的静态文件夹为空,因此您不断收到 500 服务器错误。

我可以通过更改Procfile来解决它,但它也不一致:

web: python manage.py collectstatic --noinput; gunicorn app.wsgi:application --config gunicorn_cnf.py --bind 0.0.0.0:${PORT:-5000}`
<小时/>

collectstatic 在本地正常工作,如果我运行 cctrlapp app/deployment run "python manage.pycollectstatic --noinput" 也不会显示任何错误:

669 static files copied to '/srv/www/staticfiles/static', 669 post-processed.

但是/srv/www/staticfiles/static 是空的。

<小时/>

我如何知道为什么在推送阶段没有执行collectstatic?

最佳答案

我已经能够使用custom python buildpack来调试这个问题。 ,所以这里是答案供进一步引用。

问题出在 settings.py 文件中。我在此文件中做的第一件事是检查我们是在 cloudControl 环境中还是在本地环境中。我这样做是为了寻找 CRED_FILE 环境变量(与 what is suggested 没有太大不同):如果没有找到变量,我会加载一个模仿该凭据变量进行开发的本地 JSON 文件:

try:
cred_file = os.environ['CRED_FILE']
DEBUG = False

except KeyError:
cred_file = os.path.join(BASE_DIR, 'creds.json')
DEBUG = True

一旦我了解了环境,我就可以拥有不同的INSTALLED_APPS(requirements.txt文件在生产和开发中也略有不同)或更改一些设置。

现在是坏消息:在推送阶段没有可用的 CRED_FILE

因此,我尝试加载未安装的应用程序(因为它们仅位于开发需求文件中,例如 coveragedjango-debug-toolbar)或使用未设置的凭据(当然,creds.json 不会上传到存储库:仅上传具有虚拟值的 TXT 作为引用)。这就是 collectstatic 在推送阶段默默失败的原因。

这是我的解决方案(只要您的存储库中有虚拟凭据文件,它就可以工作):

try:
cred_file = os.environ['CRED_FILE']
DEBUG = False

except KeyError:
if os.path.exists(os.path.join(BASE_DIR, 'creds.json')):
cred_file = os.path.join(BASE_DIR, 'creds.json')
DEBUG = True
else:
cred_file = os.path.join(BASE_DIR, 'creds.json.txt')
DEBUG = False

collectstatic 不使用凭据,因此您可以在 creds.json.txt 文件中拥有任何内容。不是很干净,但现在可以按预期工作。

<小时/>

编辑

正如@pst 在评论中指出的那样,有一个环境变量可以了解构建包是否正在运行,因此我们也可以使用该环境变量来加载所需的凭据并设置DEBUG

if 'CRED_FILE' in os.environ:
cred_file = os.environ['CRED_FILE']
DEBUG = False

elif 'BUILDPACK_RUNNING' in os.environ:
cred_file = os.path.join(BASE_DIR, 'creds.json.txt')
DEBUG = False

else:
cred_file = os.path.join(BASE_DIR, 'creds.json')
DEBUG = True

关于python - 在 cloudControl 部署中调试 Django `collectstatic` 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29369576/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com