【问题标题】:Rails 4 upgrade production nginx issuesRails 4 升级生产 nginx 问题
【发布时间】:2017-01-26 20:14:59
【问题描述】:

我最近将我们的应用程序从 3 更新到 4.2.7,现在我们在生产环境中遇到了问题:

  1. 资产作为 text/html 而不是各自的 css/js 标头提供。
  2. (可能相关)子目录下的预编译资源找不到,说明/cssfile.css加载成功,/subdir/cssfile.css加载失败。

升级过程中 nginx 配置文件没有变化。 config/environment/production.rb 的变化如下:

+ config.eager_load = true
-  config.serve_static_assets = false
+  config.serve_static_files = false
-  config.assets.compress = true
+  config.assets.js_compressor  = :uglifier
+  config.assets.css_compressor = :sass

在部署时,config.assets.css_compressor = :sass 引起了问题,因此我将其删除并成功完成了预编译,但不知道为什么会发生这种情况,因为我在某处读到 Rails 4 中默认的 css_compressor 是 :sass。

这是网站上使用的 nginx 配置:

upstream SITENAME {
  server unix:/home/deploy/SITENAME/shared/pids/unicorn.sock;
}

server {
  listen 80;
  server_name production.SITENAMEart.com;
  root /home/deploy/SITENAME/current/public;
  access_log  /var/log/nginx/SITENAME.access.log  main;

  client_max_body_size 64M;

  location ~ ^/assets/ {
    expires max;
    add_header Cache-Control public;
    add_header ETag "";
    break;
  }

  location ~ ^/(assets)/ {
    root /home/deploy/SITENAME/current/public;
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  location / {
    try_files $uri @SITENAME;
  }

  location @SITENAME {
    include proxy.conf;
    proxy_pass http://SITENAME;
  }

  # stats url
  location /nginx_stats {
    stub_status on;
    access_log   off;
    #allow SOME.IP.ADD.RESS;
    #deny all;
  }

}

server {
  listen 443;
  server_name production.SITENAMEart.com;
  root /home/deploy/SITENAME/current/public;
  access_log  /var/log/nginx/SITENAME.access.log  main;

  ssl on;
  ssl_certificate         /usr/local/nginx/conf/ssl/wildcard.SITENAMEart.com.crt;
  ssl_certificate_key     /usr/local/nginx/conf/ssl/wildcard.SITENAMEart.com.key.unsecure;
  ssl_client_certificate  /usr/local/nginx/conf/ssl/geotrust.crt;

  location ~ ^/assets/ {
    expires max;
    add_header Cache-Control public;
    add_header ETag "";
    break;
  }

  location / {
    try_files $uri @SITENAME;
    proxy_set_header   X-Forwarded-Proto https;
  }

  location @SITENAME {
    include proxy.conf;
    proxy_pass http://SITENAME;
    proxy_set_header   X-Forwarded-Proto https;
  }

  # stats url
  location /nginx_stats {
    stub_status on;
    access_log   off;
  }

}

最让我惊讶的是,该版本在部署到生产之前已经过全面测试,并且具有 nginx 配置 - 没有出现任何问题。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 ubuntu nginx asset-pipeline


    【解决方案1】:

    问题已解决。它与我从 Capistrano v2 移植的自定义符号链接脚本有关,该脚本在生成资产后删除了 public/assets 目录的内容。

    我还没有弄清楚为什么这在我们的暂存服务器上不是问题。

    【讨论】:

      猜你喜欢
      • 2017-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-06
      • 2014-09-03
      • 1970-01-01
      • 2013-07-24
      • 1970-01-01
      相关资源
      最近更新 更多