【发布时间】:2017-07-13 08:15:58
【问题描述】:
Nginx 1.10.1 Rails 5.0.1。资产管道正在制作 css 和 js 文件的压缩版本和本机版本,但只有未压缩的版本才会提供给浏览器。我可以在 public/assets 中看到这两个版本,我可以使用 curl 通过将“.gz”附加到传递给我的 css/js 资产 url 来检索压缩版本。
我使用的是 CDN (AWS CloudFront),但在没有 CDN 的情况下进行了测试,无论如何它仍应将我指向压缩版本,对吗?
nginx 有--with-http_gzip_static_module。以this answer 为指导,我的 nginx 配置(已编辑)具有:
http {
server {
listen 80;
server_name idoimaging.com www.idoimaging.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name idoimaging.com www.idoimaging.com;
root /var/www/idoimaging/current/public;
location ~ ^/(assets)/ {
gzip_static on;
}
}
}
我还尝试将/assets/ 作为location 中的正则表达式。在我的production.rb:
# Have also tried setting this to false
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
config.middleware.insert_before(Rack::Sendfile, Rack::Deflater)
config.assets.compress = true
config.assets.js_compressor = Uglifier.new(mangle: false)
我正在使用禁用缓存的 Chrome 进行测试,也是为了提高 curl https://idoimaging.com | grep assets 的速度,我认为它应该与浏览器具有相同的行为?
我不知道为什么 nginx 不会在它们存在时提供 gzip 的 js/css 资产文件。
编辑:我还看到this guide 采用另一种方法:使用 Rails 作为静态资产服务器而不是 nginx。这会是更好的方法吗?
【问题讨论】:
标签: ruby-on-rails nginx