ruby-on-rails - Rails 4.2 应用程序不提供 Gzipped Assets

标签 ruby-on-rails nginx static gzip assets

我正在尝试通过提供 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/

相关文章:

css - chardinjs 不能在 ruby​​ on rails 中工作

ruby-on-rails - Michael Hartl 的 Rails 教程第 12 章——所有 54 个测试都失败了……?

nginx - Web 服务器如何知道它必须将请求发送到应用程序服务器和静态文件?

mysql - 如何将静态属性映射到 RDBMS

ruby-on-rails - 我可以在Rails应用程序的管理服务器上运行Elastic Server吗

javascript - CoffeeScript - 如何在 ruby​​ on Rails 中使用 CoffeeScript?

mysql - Puppet 中的 Augeas for mysql 配置失败

http - 配置 nginx 以从单个服务器提供 HTTP 和 HTTPS 站点的麻烦

java - 更改主要参数类型

java - 这是一个忽略多线程的有效单例吗