- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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
。
因此,我尝试加载未安装的应用程序(因为它们仅位于开发需求文件中,例如 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 在评论中指出的那样,有一个环境变量可以了解构建包是否正在运行,因此我们也可以使用该环境变量来加载所需的凭据并设置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/
我不知道我是否混淆了 collectstatic 的目的.这是我的设置模块 : # BASE_DIR is the location of my django project folder STATI
这有效: ./manage.py collectstatic -i bower_components 这不会: ./manage.py collectstatic -i bower_component
我试图从 collectstatic 的静态文件夹中排除一些文件和目录命令。 static -sample -css -dest -vendor index.cs
我正在尝试将应用程序升级到 Django 1.11,但遇到 collectstatic 问题。 旧版本: django 1.8.17 django-storages 1.5.1 新版本: django
我是 django 的新手!当我使用命令 python manage.py collectstatic 我得到这个错误 django.core.exceptions.ImproperlyConfigu
我有一个带有scraper 的 Django 网站,它每天都下载图片,所以我想用 crontab 自动执行 collectstatic我试过这个添加到 crontab.cr yes | python2
尝试收集我的静态文件,因为我很快就会部署我的网站。接收: Unknown command: 'collectstatic' 查看 django-admin 帮助后我收到此警告: (error: Req
只是为了解决这个问题,如果可能的话,我想这样做而不将它们全部嵌套在应用程序的静态文件夹中的应用程序名称的目录中,这感觉是多余的。如果这是唯一的方式,那么这就是生活。 我在用: STATICFILES_
有没有办法让python manage.py collectstatic找到更新的静态文件?目前,它正在正确搜索STATICFILES_DIRS并找到我的静态文件的位置,但它只上传新文件。如果我修改静
在我的 deb postinst 文件中: PYTHON=/usr/bin/python PYTHON_VERSION=`$PYTHON -c 'import sys; print sys.versi
我有 Django 设置来收集我的静态文件并使用 django-storages 将它们复制到 S3 中,当我显式运行时这就像一个魅力 heroku run python manage.py coll
每次推送到 Heroku 时,我都会运行 collectstatic --noinput。新文件被复制,但有更改的旧文件不会被覆盖。但是,删除文件并推送到 heroku 会按预期替换该特定文件。 如何
我正在使用 Django 1.3.1 和 contrib.collectstatic 应用程序来管理我的静态文件。 我的项目结构是 myproject - settings.py -
在 django 1.7 中,collectstatic 为我抛出一个异常: OSError: [Errno 2] No such file or directory: '/static' 我已经执行
我正在尝试在我的 Ubuntu 服务器中运行以下命令: ./manage.py collectstatic -v 0 --noinput 我收到此错误消息: Traceback (most recen
我有一堆正在使用 collectstatic 处理的 css/js 文件。它们在我的 staticfiles 目录中成功创建,并附加了数字。 (env)zain@gandalf ~/projects/
我在 GitHub 上有一个基于 Django 的项目,我希望每个人都能够使用一键部署按钮进行部署。它不使用 django.contrib.staticfiles 应用。 我在项目的根目录下有以下 a
在 Django 中,约定是将应用程序特定的所有静态文件(即 css、js)放入名为 static 的文件夹中。所以结构看起来像这样: mysite/ manage.py mysite
当我给出命令“python manage.py collectstatic”时,出现以下问题 "0 static files copied to '/home/leonard368a/leonard3
我正在使用 Django3,目前我的 makefile 中有以下用于“构建”的命令 python3 manage.py collectstatic 为了使用管道自动化我的构建过程,我想摆脱询问的提示
我是一名优秀的程序员,十分优秀!