Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 应用程序-<;sha1>;。js在每个请求中重新下载(优化缓存的提示)_Ruby On Rails_Caching_Deployment_Nginx_Unicorn - Fatal编程技术网

Ruby on rails 应用程序-<;sha1>;。js在每个请求中重新下载(优化缓存的提示)

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

我刚刚意识到,每当我更改页面时,我的rails应用程序上的application.css和.js&font文件总是被重新下载。这会给服务器带来相当大的负担,并减慢加载时间

这里有谁能推荐我如何优化缓存,最好是我可以遵循的最佳实践,因为坦率地说,我在部署优化方面不是很有经验

ps:我已经阅读并完成了来自的一些提示,但是资产仍然会被重新加载

已编辑:我的nginx配置

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配置。。