2

我在 django 中遇到了一个奇怪的问题。我正在使用 django-compress 应用程序。直到调试为真,一切顺利。当我执行 debug=False 时,如果是 404,我会遇到内部服务器错误问题,如果没有 404,我会遇到没有 js 和 css 的页面。最糟糕的是,在控制台上我收到以下错误

UncompressableFileError: 'css/default.css' 不能通过 COMPRESS_URL ('/static/') 访问并且不能被压缩 [16/Jul/2012 17:17:05] "GET /static/img/favicon.ico HTTP/1.1" 500 59

像这样,它为每个 GET 请求显示 500,可通过 /static/ 访问

所以现在没有得到 js 和 css 的原因很清楚了。但是在 404 页面上出现错误的原因尚不清楚。

即使我尝试禁用和启用 django-compress,但在启用正常页面时也会显示 404 错误

请让我知道是什么导致所有 /static/ 事物出现 500 错误,以及为什么 404 页面会出现内部服务器错误。

4

4 回答 4

7

DEBUG = TrueDjango 提供静态文件时。/static/这意味着它可以在每个 Django 应用程序的目录中找到静态文件。反过来,这意味着 django-compressor 可以找到它需要压缩的每个静态文件。

DEBUG = FalseDjango 不再提供静态文件但它们应该由 Web 服务器提供时。它通过提供STATIC_ROOT目录中的所有静态文件(通常/static/)来做到这一点。这意味着来自 Django 应用程序的所有静态文件都需要放在那里。

这可以通过collectstatic命令完成(请参阅Django 文档中的静态文件应用程序)。运行该命令后,所有静态文件都应该位于其中,STATIC_ROOT并且 django-compressor 应该能够再次找到这些文件。这解决了您在使用静态文件时遇到的 404 错误,并且当 django-compressor 工作时,您将不再遇到 500 错误。

于 2012-07-16T12:31:09.063 回答
5

对于 Django >= 1.5,如果您遇到此问题,请确保您正确设置了ALLOWED_HOSTS设置。没有该设置会使 Django Compressor 陷入UncompressableFileError.

我知道我们是在 2014 年,这个问题有点老了 ;) 但我就在今天遇到了这个问题,我的特殊情况的解决方案就是这样,而且没有任何解释。

希望它可以帮助别人。

于 2014-01-13T14:48:42.593 回答
1

您可以打开 django 的电子邮件功能。只需修改setting.py,如下所示:

DEBUG = False
ADMINS = (
    ('username', 'username@example.com'),
)
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = ''
EMAIL_HOST_PASSWORD = ''
EMAIL_PORT = 587
EMAIL_USE_TLS = True

如果发生 500,您将收到一封来自 django 的电子邮件。我希望这可以帮助你。

于 2014-04-28T03:04:15.507 回答
1

这个问题也困扰着我。大多数解决方案都是关于设置的ALLOWED_HOST。这些答案都不起作用。由于没有仔细阅读文档,我遇到了这个问题。

所以,我们首先要明白这一点。为每个请求编译所有资产是不现实的,对吧?因此,当您将应用程序部署到生产服务器以及关闭调试模式时。你应该记住不要让这种情况发生。

根据文档,我通过将代码放在下面来解决此问题

COMPRESS_OFFLINE = True

每次部署我的应用程序时,我都会运行此命令

python manage.py compress

对于弹性豆茎,您可以使用以下命令:

container_commands:
  ...
  03_compress:
    command: "source /opt/python/run/venv/bin/activate && python manage.py compress"

这可以让您进行离线预编译,而无需在每个请求上编译所有资产。

参考:https ://django-compressor.readthedocs.io/en/latest/scenarios/

于 2017-10-05T15:23:54.403 回答