尝试使用 whitenoise 和 django-compressor 将 Django 应用程序部署到 Heroku。在生产环境下,启用
我还设置了
一些设置(请注意,我有一个包含
DEBUG = False
和 COMPRESS_ENABLED = True
后,可以访问所有静态资源,但是所有压缩文件都返回 404 错误,例如:
启用http://*.herokuapp.com/static/CACHE/css/fbfaa35dc638.css Failed to load resource: the server responded with a status of 404 (NOT FOUND)
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 %}
再次提醒,将它们移出压缩块可以解决这个问题。只是找不到压缩文件。
有什么想法吗?
编辑
我忘记提到一个设置,根据部署清单,我添加了这个设置: 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在Heroku上静态文件找不到的重复问题(使用whitenoise):
- 我的问题源于django-compressor,而不仅仅是whitenoise
- 他们没有得到404错误,而是500错误。
- 他们的问题是忘记运行collectstatic……而这不是这里的情况。