【发布时间】:2017-01-26 20:14:59
【问题描述】:
我最近将我们的应用程序从 3 更新到 4.2.7,现在我们在生产环境中遇到了问题:
- 资产作为 text/html 而不是各自的 css/js 标头提供。
- (可能相关)子目录下的预编译资源找不到,说明
/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