我正在尝试通过提供 GZipped Assets 而不是常规编译 Assets 来优化我的 rails 4 应用程序。 GZip 压缩在 部分中描述。 4.1.2 本 Rails 指南:http://guides.rubyonrails.org/asset_pipeline.html
在预编译它们之后,rails Assets 管道确实生成了我的 Assets 的 gzip 版本,我可以在我的应用程序的公共(public)文件夹中的服务器文件系统上看到这些。
但是,在检查网络事件时,我的网页会退回到提供未压缩 Assets 而不是 gzip 版本。这让我认为我的网络服务器没有正确配置为提供 gzip 压缩的 Assets 。我在我的 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 在我的安装中,然后我开始使用 config.serve_static_files 我的 中的选项生产.rb 文件:
config.serve_static_files = true
config.serve_static_files = false
config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?
这三个设置都导致我的服务器回退到常规压缩 Assets 。
最后,我尝试安装 rack-zippy gem ( https://github.com/eliotsykes/rack-zippy ) - 它优先提供静态 gzip 压缩 Assets ,否则回退到常规压缩 Assets 。这也不起作用,这可能意味着我的 NGINX 配置需要修改。
非常感谢任何帮助!
最佳答案
这个答案为我解决了这个问题: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)
关于ruby-on-rails - Rails 4.2 应用程序不提供 Gzipped Assets ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29501470/