我有一个Rails 5应用程序。我使用Carrierwave gem将图片上传到public/system/...
。
在审核生产应用程序以进行性能调整时,我意识到我错误配置了nginx,并且它只提供来自/assets
而非/assets
和的静态文件/system
。
我有什么:
location ~ ^/assets/ {
gzip_static on;
expires max;
add_header Cache-Control public;
}
我(我想)应该拥有什么:
location ~ ^/(assets|system)/ {
gzip_static on;
expires max;
add_header Cache-Control public;
}
但是,config.public_file_server.enabled = false
设置为production.rb
。
所以现在我很困惑--Rails如何为这些图像提供服务?我假设我对资产管道实际上的工作方式有一个(严重)不完整的理解?
更新:nginx config
upstream puma {
server unix:///home/deploy/apps/myapp/shared/sockets/mydomain.sock;
}
server {
listen 80 default;
server_name mydomain.com;
root /home/deploy/apps/myapp/current/public;
access_log /home/deploy/apps/myapp/shared/log/nginx.access.log;
error_log /home/deploy/apps/myapp/shared/log/nginx.error.log info;
location ~ ^/(assets|system)/ {
gzip_static on;
expires max;
add_header Cache-Control public;
}
location ~ ^/(robots.txt|sitemap.xml.gz)/ {
root /home/deploy/apps/myapp/current/public;
}
try_files $uri/index.html $uri @puma;
location @puma {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://puma;
}
location /cable {
proxy_pass http://puma;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
error_page 500 502 503 504 /500.html;
client_max_body_size 50M;
keepalive_timeout 10;
listen 443 ssl; # managed by Certbot
# ssl certificate info...
}
答案 0 :(得分:1)
这将有助于发布此应用程序的整个nginx配置。当乘客,美洲狮等服务时,Rails会尊重public_file_server。但是,它可以很容易地用nginx覆盖。 常见的nginx配置行
{{1}}
基本上告诉nginx服务/公共“因为它”并使public_file_server无关紧要。 (或许)。