【发布时间】:2016-01-11 08:49:12
【问题描述】:
尝试使用 whitenoise 和 django-compressor 将 Django 应用程序部署到 Heroku。
使用DEBUG = False 和COMPRESS_ENABLED = True 将其部署到生产环境中,我的所有静态资产都可以毫无问题地访问。但是,所有压缩文件都返回 404,例如:
http://*.herokuapp.com/static/CACHE/css/fbfaa35dc638.css 失败 加载资源:服务器响应状态为 404(未找到)
启用DEBUG 或禁用COMPRESS_ENABLED 都可以解决问题,但这当然不是我想要的。
我也在设置STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage',但更改它并没有帮助。
一些设置(注意我有一个设置目录,例如base.py、local.py 等。这就是为什么我需要在路径上额外添加一个../):
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, '../staticfiles')
STATICFILES_DIRS = (
os.path.join(BASE_DIR, '../static'),
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'compressor.finders.CompressorFinder',
)
在我的基本模板中:
{% compress css %}
<link rel="stylesheet" href="{% static 'css/app.css' %}">
{% block css %}{% endblock %}
{% endcompress %}
[...]
{% compress js %}
<script src="{% static 'js/main.js' %}"></script>
{% block js %}{% endblock js %}
{% endcompress %}
同样,将它们移出压缩块可以解决问题。只是压缩文件找不到。
有什么想法吗?
编辑
我忘了提及我根据deployment checklist 添加的一项设置,即: https://docs.djangoproject.com/en/1.8/ref/templates/api/#django.template.loaders.cached.Loader
TEMPLATES[0]['OPTIONS']['loaders'] = [
(
'django.template.loaders.cached.Loader', [
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
]
),
]
删除此设置会使页面重新工作。但是,JS 和 CSS 文件没有被压缩……这是怎么回事?
编辑 2
这不是Django staticfiles not found on Heroku (with whitenoise) 的重复:
- 我的问题来自 django-compressor,而不仅仅是白噪声
- 他们得到的不是 404,而是 500。
- 他们的问题是他们忘记运行 collectstatic...这里不是这种情况。
【问题讨论】:
-
我有和你一样的问题,但在 Heroku 上没有。我使用 django cookiecutter 项目,但问题是一样的。 “CACHE”文件夹中的任何文件都会返回 404。知道为什么吗?
标签: python django heroku django-compressor