![](/img/trans.png)
[英]Django - deployment with DigitalOcean issue - python collectstatic
[英]Problems debugging Django `collectstatic` in a cloudControl deployment
我有一个部署到cloudControl的Django应用程序。 配置是标准配置,推送/部署不会发生(明显)错误。
但是collectstatic步骤没有执行:它静默失败(我看不到-----> 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.py collectstatic --noinput"
不会显示任何错误:
将669个静态文件复制到'/ srv / www / staticfiles / static',后处理669。
但是/srv/www/staticfiles/static
为空。
我怎么知道为什么在push阶段没有执行collectstatic?
我已经能够使用自定义的python buildpack调试问题,所以这里是进一步参考的答案。
问题出在settings.py
文件中。 我在此文件中要做的第一件事是检查我们是在cloudControl环境中还是在本地环境中。 我这样做是在寻找CRED_FILE
环境变量(与建议的变量没有太大不同):如果未找到任何变量,则会加载一个本地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
。
因此,我试图加载未安装的应用程序(因为它们仅在开发需求文件中,例如coverage
或django-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在评论中指出的那样,有一个环境变量可以知道buildpack是否正在运行,因此我们也可以使用该变量来加载所需的凭据并设置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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.