我在django遇到一个奇怪的问题。 我正在使用django-compress应用程序。 直到调试正确,一切正常。 当我执行debug = False时,在404的情况下会遇到内部服务器错误问题,在没有404的情况下会遇到没有js和css的页面。最糟糕的是,在控制台上我遇到以下错误
UncompressableFileError: 'css/default.css' isn't accesible via
COMPRESS_URL ('/static/') and can't be compressed [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页显示内部服务器错误。
您如何提供文件? 您的部署设置正确吗? 您是否收集了静态文件并将服务器指向根目录?
当DEBUG = True时,Django提供静态文件。这意味着它可以在每个Django应用的/static/目录中找到静态文件。反过来,这意味着django-compressor可以找到它需要压缩的每个静态文件。
当DEBUG = False时,Django不再提供静态文件,但应由Web服务器提供。它通过提供STATIC_ROOT目录(通常为/static/)中的所有静态文件来实现此目的。这意味着需要将Django应用程序中的所有静态文件都放在其中。
这可以通过collectstatic命令完成(请参见Django文档中的staticfiles应用)。运行该命令后,所有静态文件都应位于STATIC_ROOT中,并且django-compressor应该能够再次找到这些文件。这就解决了您在使用静态文件时遇到的404错误,并且当django-compressor工作时,您将不再收到500错误。
就像Simeon所说的那样。 这是一个完整的示例:stackoverflow.com/questions/10460028/
嘿@Simeon我已经运行了collectstatic命令,那么我也面临着同样的问题。 我不明白怎么了。 在这里发生的事情是我认为404页引发了一些内部服务器错误,并且出现错误,而且我不明白为什么它找不到静态文件
@ParitoshSingh:您是否配置了Web服务器以提供静态文件? 您需要执行此操作,然后运行collectstatic(已完成)。 然后,您可以查看静态文件。
@SimeonVisser你是对的,但是在那种情况下,它应该给出404错误,为什么它会给出内部服务器错误
@ParitoshSingh:也许您的Web服务器配置有问题? 如果500错误是由Apache / nginx引起的,则需要修复该错误。 还是看到Django 500错误页面?
对于Django> = 1.5,如果遇到此问题,请确保正确设置ALLOWED_HOSTS设置。没有该设置将使Django Compressor陷入UncompressableFileError。
我知道我们已经在2014年了,这个问题有点老了;)但是我今天才陷入这个问题,针对我的特殊情况的解决方案是,并没有在任何地方解释它。
希望它可以帮助其他人。
您可以打开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的电子邮件。希望对您有所帮助。
这个问题也困扰着我。大多数解决方案都与设置ALLOWED_HOST有关。这些答案都不起作用。因为没有仔细阅读文档,所以出现了这个问题。
因此,我们必须首先了解这一点。您为每个请求编译所有资产是不现实的,对吧?因此,在将应用程序部署到生产服务器以及关闭调试模式时。您应该记住不要让这种情况发生。
根据文档,我通过将代码放在下面来解决此问题
COMPRESS_OFFLINE = True
每次部署应用程序时,我都会运行此命令
python manage.py compress
对于弹性beanstalk,可以使用以下命令:
container_commands:
...
03_compress:
command:"source /opt/python/run/venv/bin/activate && python manage.py compress"
这样一来,您就可以离线进行预编译,而无需在每个请求上都编译所有资产。
参考:https://django-compressor.readthedocs.io/en/latest/scenarios/