Rails 4.2 App不提供Gzip资产

时间:2015-04-07 21:17:44

标签: ruby-on-rails nginx static gzip assets

我正在尝试通过提供GZipped资产而不是常规编译资产来优化我的rails 4应用程序。 GZip压缩在此Rails指南的 4.1.2 部分中进行了描述:http://guides.rubyonrails.org/asset_pipeline.html

rails资产管道确实在预编译之后生成了我的资产的gzip压缩版本,我可以在我的应用程序公共文件夹中的服务器文件系统上看到这些版本。

但是,在检查网络活动时,我的网页会回退到提供未压缩的资源而不是gzip压缩版本。这让我觉得我的Web服务器没有正确配置来提供gzip压缩资产。我在我的rails应用程序前面使用NGINX和乘客模块。

我首先尝试在Rails Asset Pipeline指南中使用推荐的NGINX配置,方法是在配置文件中添加以下内容:

location ~ ^/(assets)/  {
  root /path/to/public;
  gzip_static on; # to serve pre-gzipped version
  expires max;
  add_header Cache-Control public;
}

然后我仔细检查了http_gzip_static_module确实是用我的NGINX安装编译的:

/opt/nginx/sbin/nginx -V    # --with-http_gzip_static_module

更新了NGINX配置,并确认http_gzip_static_module在我的安装中,然后我在 production.rb 文件中使用 config.serve_static_files 选项进行了播放:< / p>

config.serve_static_files = true
config.serve_static_files = false
config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?

这三个设置都导致我的服务器退回到常规压缩资产。

最后,我尝试安装rack-zippy gem(https://github.com/eliotsykes/rack-zippy) - 它优先提供静态gzip资源,然后回退到常规压缩资产。这也行不通,这可能意味着我的NGINX配置需要修改。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

这个答案为我解决了这个问题:https://stackoverflow.com/a/40824720/667335

我在config / production.rb中错过了这个

config.middleware.insert_before(Rack::Sendfile, Rack::Deflater)

# Compress JavaScripts and CSS.
config.assets.compress = true
config.assets.js_compressor = Uglifier.new(mangle: false)

答案 1 :(得分:0)

看起来Sprockets不再适合你了。看来missing gzip version of css and js assets已经回答了这个问题。