Rails, показывающие изображения, даже если nginx неправильно настроен? - PullRequest
0 голосов
/ 31 мая 2018

У меня есть приложение Rails 5.Я использую гем Carrierwave, чтобы разрешить загрузку изображений на 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

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...

}

1 Ответ

0 голосов
/ 01 июня 2018

Это поможет опубликовать всю конфигурацию nginx для этого приложения.Rails будет учитывать public_file_server, когда он обслуживается пассажиром, puma и т. Д. Однако, его можно легко переопределить с помощью nginx.Общая строка конфигурации nginx

root /home/rails/testapp/public;

в основном говорит nginx, что нужно обслуживать / public "как есть", и делает public_file_server нерелевантным.(Возможно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...