Whitenoise和django压缩器导致404压缩文件

cpu*_*ury 2 python django heroku django-compressor

尝试使用whitenoisedjango-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',
)
Run Code Online (Sandbox Code Playgroud)

在我的基本模板中:

{% 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 %}
Run Code Online (Sandbox Code Playgroud)

再次,将它们移出压缩块可以解决问题.只是压缩文件无法找到.

有任何想法吗?

编辑

我忘了提及我根据部署清单添加的一个设置,即: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',
        ]
    ),
]
Run Code Online (Sandbox Code Playgroud)

删除此设置会使页面再次运行.但是,JS和CSS文件没有被压缩......发生了什么?

编辑2

这不是Heroku上使用Django静态文件的副本(使用whitenoise):

  • 我的问题出现的问题来自django-compressor,而不仅仅是whitenoise
  • 他们没有获得404,而是500.
  • 他们的问题是他们忘了跑上收集......这不是这里的情况.

Rya*_*yan 7

这似乎是一个已知问题.

根据Squebe的说法 - "Compressor的在线模式不适用于Heroku,因为Whitenoise只在加载应用程序时检查静态文件夹(请参阅我对问题#680的评论).在生产中使用压缩器我认为你需要在离线中使用它模式并在使用Heroku的post编译钩子加载应用程序之前运行python manage.py compress."

没办法让它在Heroku#486上运行

  • 谢谢,@ Ryan.这对我有用.以防其他人需要它:只需将[此文件](https://github.com/nigma/heroku-django-cookbook/blob/master/bin/run_compress)的内容添加到您的"bin/post_compile"中回购 - 至少那个对我有用.另外,当我使用`.buildpacks`并且我需要`bower_components`存在于_compression_之前时,我颠倒了顺序,让第1行中的NodeJS和第2行中的Python位于`.buildpacks`. (4认同)