Heroku上Django的CSS和JS文件如何进行Gzip压缩

4
我正在尝试压缩我的CSS和JS文件并作为gzip文件提供,但一直没有成功。
我已经尝试了所有方法,如django-pipeline、django-compressor等。
我已经让django-compressor创建了gzip文件,但不确定如何提供它们。我使用GzipMiddleaware来压缩和提供我的HTML文件。
请问有人可以编写逐步指南,介绍如何在Heroku Django上gzip和提供静态文件吗?
很抱歉要求详细的步骤,我不是要求别人给我喂饭,但由于这个问题困扰我已经将近24小时了,尝试了无数的解决方案,但都不起作用。
顺便说一下,我正在使用django-1.5。
谢谢你的帮助!

你在使用什么来提供静态文件?你是将它们推送到S3,还是通过Django提供服务? - Thomas
@Thomas 我正在通过Django提供静态文件,并通过S3提供媒体文件。 - kumar
2个回答

2
您应该认真考虑将静态文件上传到s3。Django并不适合用于提供文件服务,这会消耗宝贵的应用服务器资源。
以下是使用s3作为静态文件的几个好处:http://blog.doismellburning.co.uk/2012/07/14/using-amazon-s3-to-host-your-django-static-files/ 以下是一篇文章,解释如何让S3提供gzipped资源:http://www.jamiebegin.com/serving-compressed-gzipped-static-files-from-amazon-s3-or-cloudfront/ 这里有一个存储后端,可以将静态文件收集到s3中。
您可以很容易地编写一个存储后端,通过继承此后端和django-compressor的后端来进行gzip压缩和上传到s3。

感谢您的帮助。但我的一些用户在防火墙后访问我的网站,该防火墙会阻止Amazon S3。为了确保所有受众的基本工作,我决定不使用AWS来处理静态内容。您能否协助通过Django提供组合的静态文件? - kumar
2
我向您保证,对静态文件进行gzip压缩不会对页面加载时间产生任何明显影响。瓶颈在于您正在从应用服务器提供静态文件,没有缓存或etag,并且在负载均衡器后面,无法缓存任何内容。如果您想为了几个使用落后防火墙的用户而自寻烦恼,那没问题;但我不会告诉您枪藏在哪里。 - Thomas
Thomas,感谢你的见解。我完全同意,但是这几个用户恰好是我网站非常重要的访问者,不能忽视。让我试着找到更好的替代方案,比如一个可以在任何地方访问的CDN。感谢你的帮助。如果有其他想法的人,请分享。 - kumar
谢谢Thomas。我现在正在使用gae来提供静态文件,django compressor非常棘手,不得不编写bash脚本来处理手动工作。 - kumar

0

我曾经遇到过完全相同的问题。我一开始使用grunt,但发现需要很多额外的配置等等,后来我找到了django-compressor,它真是太棒了!

但是我部署到Heroku上时,Heroku不会gzip任何东西,而是依赖应用程序自己来完成。

我找不到任何WSGI包装器可以提供预压缩的gzip文件,所以我扩展了dj-static来完成这个任务。请查看我的dj-static分支,其中包括这些添加内容。基本上,它将检查是否有对应的静态文件名以.gz结尾,如果找到了,就会用它来代替原始文件。我在我的Heroku项目中使用这个方法。

https://github.com/hdickson/dj-static

如果您在运行Django内置的Web服务器时想要在开发服务器上进行测试,请确保使用--nostatic命令行开关来运行它。例如:python manage.py runserver 0.0.0.0:80 --nostatic


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接