Ruby on rails 应用程序-<;sha1>;。js在每个请求中重新下载(优化缓存的提示)
我刚刚意识到,每当我更改页面时,我的rails应用程序上的application.css和.js&font文件总是被重新下载。这会给服务器带来相当大的负担,并减慢加载时间 这里有谁能推荐我如何优化缓存,最好是我可以遵循的最佳实践,因为坦率地说,我在部署优化方面不是很有经验 ps:我已经阅读并完成了来自的一些提示,但是资产仍然会被重新加载 已编辑:我的nginx配置Ruby on rails 应用程序-<;sha1>;。js在每个请求中重新下载(优化缓存的提示),ruby-on-rails,caching,deployment,nginx,unicorn,Ruby On Rails,Caching,Deployment,Nginx,Unicorn,我刚刚意识到,每当我更改页面时,我的rails应用程序上的application.css和.js&font文件总是被重新下载。这会给服务器带来相当大的负担,并减慢加载时间 这里有谁能推荐我如何优化缓存,最好是我可以遵循的最佳实践,因为坦率地说,我在部署优化方面不是很有经验 ps:我已经阅读并完成了来自的一些提示,但是资产仍然会被重新加载 已编辑:我的nginx配置 upstream example_com { server unix:/tmp/example_com.todo.sock fa
upstream example_com {
server unix:/tmp/example_com.todo.sock fail_timeout=0;
}
server {
listen 80;
server_name example.com;
root /var/www/example.com/current/public;
try_files $uri/index.html $uri @example_com;
location @example_com {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://example_com;
}
location ~ ^/assets/ {
expires 1y;
add_header Cache-Control public;
add_header ETag "";
break;
}
client_max_body_size 4G;
keepalive_timeout 5;
error_page 500 502 503 504 /500.html;
access_log /var/www/example_com/shared/log/access.log main;
error_log /var/www/example_com/shared/log/error.log info;
}
缓存头,从firebug获得:
Response Headers From Cache
Cache-Control max-age=31536000, public
Content-Encoding gzip
Content-Type application/x-javascript
Date Wed, 04 Jul 2012 09:45:51 GMT
Expires Thu, 04 Jul 2013 09:45:51 GMT
Last-Modified Wed, 04 Jul 2012 05:52:38 GMT
Server nginx/1.2.1
Vary Accept-Encoding
如果您正在编译资产(
rake资产:precompile
或部署到heroku这样的环境),那么这些将只是静态文件,如application-8675309…..js
,应该由web服务器提供。确保您使用的任何web服务器都知道如何在public/assets目录中提供文件,而不是让这些请求通过rails。请参阅以获取实现此目的的一些服务器配置示例。对于明显的问题,很抱歉,但是您能否确认您正在生产RIALS\u ENV/RACK\u ENV中运行,并且服务器没有使用304(未修改)响应?是,我在生产环境中运行了它。您能确认nginx提供的是静态文件而不是rails,并且您的浏览器看到了缓存头吗?我想是的,我在上面发布了缓存头。。但是我如何检查nginx是否是为静态文件服务的呢?nginx肯定是在设置缓存头,但是您也可以检查nginx和rails日志,看看谁在做什么。是否可能在firefox中禁用了缓存(例如),是的,我已经预编译了我的资产,并在生产配置中将serve static资产设置为false。。不幸的是,我仍然得到了200个响应,而不是304个响应。事实上,你说它提供的是application.js而不是application-.js,这表明至少该资产没有得到编译。您的application.rb中是否有config.assets.enabled=true
?哦,很抱歉,是的,我的意思是application-.js。。不是application.js。应该是“应用程序-.js重新下载”。。为了简单起见,我键入application.js..您在web服务器上使用的是什么,您能粘贴服务器配置的相关部分吗?我在web服务器上使用nginx,我在编辑的问题上添加了nginx配置。。