我在django面临一个奇怪的问题。我正在使用django-compress app。直到调试才是真的一切都好。当我执行debug = False时,我遇到内部服务器错误问题,如果是404,页面没有js和css,如果没有404.最糟糕的部分是,在控制台上我得到以下错误
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错误
请告诉我导致所有/静态/事物500错误的原因以及为什么404页面会导致内部服务器错误。
答案 0 :(得分:5)
当DEBUG = True
Django提供静态文件时。这意味着它可以在每个Django应用程序的/static/
目录中找到静态文件。反过来,这意味着django-compressor可以找到它需要压缩的每个静态文件。
当DEBUG = False
Django不再提供静态文件但它们应该由Web服务器提供服务时。它通过提供STATIC_ROOT
目录中的所有静态文件(通常为/static/
)来实现此目的。这意味着需要将Django应用程序中的所有静态文件放在那里。
可以使用collectstatic
命令完成此操作(请参阅Django文档中的The staticfiles app)。运行该命令后,所有静态文件都应位于STATIC_ROOT
中,并且django-compressor应该能够再次找到这些文件。这解决了使用静态文件得到的404错误,当django-compressor工作时,你将不再得到500错误。
答案 1 :(得分:5)
对于Django> = 1.5,如果您遇到此问题,请确保正确设置ALLOWED_HOSTS
设置。没有这个设置会使Django Compressor落入UncompressableFileError
。
我知道我们是在2014年,这个问题有点陈旧;)但是我今天陷入了这个问题,我的具体案例的解决方案是那个,并没有解释它。
希望它可以帮助别人。
答案 2 :(得分:0)
您可以打开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的电子邮件。我希望这可以帮到你。
答案 3 :(得分:0)
这个问题也困扰着我。大多数解决方案都是关于设置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/