0

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

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

ps:我已经阅读并完成了http://guides.rubyonrails.org/caching_with_rails.html中的一些提示,但资产仍然会重新下载..

编辑:我的 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;
}

缓存头,从萤火虫得到这个:

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
4

1 回答 1

0

如果您正在编译资产(rake assets:precompile或部署到像 heroku 这样的环境),那么这些将只是静态文件,例如application-8675309.....js,应该由您的 Web 服务器提供。确保您使用的任何 Web 服务器都知道在您的 public/assets 目录中提供文件,而不是让这些请求通过 rails。请参阅http://guides.rubyonrails.org/asset_pipeline.html#in-production以获得一些示例服务器配置来完成此操作。

于 2012-07-04T07:56:29.977 回答