Django-compressor: 404 用于缓存中的压缩文件

创建于 2017-05-07  ·  6评论  ·  资料来源: django-compressor/django-compressor

我无法访问 django-compressor 创建的文件。 它是在staticfiles/CACHE/中创建的,但是当我加载页面时它说:

GET https://site.com/de/static/CACHE/css/5e257aa688ab.css/ 404 (Not Found)
GET https://site.com/de/static/CACHE/js/3f1c59956fa3.js/ 404 (Not Found)

注意:原始链接被重定向到 404 页面,因此 URL 中的/de/ 。 在源代码中,以下块是正确的:

<link rel="stylesheet" href="/static/CACHE/css/5e257aa688ab.css" type="text/css" />
<script type="text/javascript" src="/static/CACHE/js/3f1c59956fa3.js"></script>

值得注意的是,我使用django-sekizai和相应的后处理器compressor.contrib.sekizai.compress

我的设置:

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

COMPRESS_STORAGE = 'compressor.storage.GzipCompressorFileStorage'
COMPRESS_URL = STATIC_URL
COMPRESS_ENABLED = True

STATIC_ROOT = '/app/staticfiles/'  # usually computed, ends up here
STATIC_URL = '/static/'

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    # Django-Bower
    'compressor.finders.CompressorFinder',
)

模板标签:

{% render_block "css" postprocessor "compressor.contrib.sekizai.compress" %}
{% render_block "js" postprocessor "compressor.contrib.sekizai.compress" %}

有人能帮我吗? 我已经坚持了 3 天和无数小时......

最有用的评论

@oesah ,谢谢。 我有完全相同的问题。 我意识到这不是压缩器问题,并且该线程现已关闭,但如果您已经开始讨论白噪声,请您发布链接。 我花了几个小时试图解决这个问题,这个线程是一个救生员!

所有6条评论

当我在本地启用压缩器时,它可以完美运行! 它只是在服务器上,它找不到 CACHE 文件夹中的文件,它找到的所有其他内容。

好的另一个发现:我猜这个问题是由于 sekizai + whitenoise + 压缩器的组合而出现的。 Whitenoise Docs 说“_出于性能和安全原因 WhiteNoise 不会在启动后检查新文件(除非使用 Django DEBUG 模式)。因此,必须提前生成所有静态文件。如果您使用的是 Django Compressor,这可以是使用其离线压缩功能执行。_”因此,每当用户打开页面时,Sekizai 都会实时压缩它们(由于 sekizai 的性质,离线压缩不可用)。 Whitenoise 不会再次搜索,因此它假定该文件不存在。 当我在打开页面并创建文件后重新启动 Django 时,它可以工作。 但是如果我转到另一个页面,我必须再次执行相同的过程(打开页面并重新启动)。 然后它正确地找到它们......

知道如何解决吗? 我的下一个测试是不要将 sekizai 与压缩后处理器一起使用,但我希望有一个适用于 sekizai 和实时静态请求的解决方案。

所以最终修改whitenoise.django.DjangoWhiteNoise并改变了

    self.autorefresh = settings.DEBUG
    self.use_finders = settings.DEBUG

    self.autorefresh = True
    self.use_finders = True

现在它起作用了。 忽略性能问题(我还没有注意到,相反,Google Page Speed Insight 在启用自动刷新的情况下又给了我一分..),安全问题是什么? 我可以绕过这些吗? 如果 whitenoise 也可以处理实时创建的静态(如 django-compressor CACHE),那就太棒了。

希望我的投入能帮助其他人偶然发现这一点。

你好,

这不是压缩器问题,这属于 stackoverflow 或类似的(或者可能是白噪声支持论坛)

是的,我得出了这个结论:)会问白噪声的人。 谢谢

@oesah ,谢谢。 我有完全相同的问题。 我意识到这不是压缩器问题,并且该线程现已关闭,但如果您已经开始讨论白噪声,请您发布链接。 我花了几个小时试图解决这个问题,这个线程是一个救生员!

此页面是否有帮助?
0 / 5 - 0 等级