Назад | Перейти на главную страницу

Конфигурация nginx для развертывания подкаталога rails

У меня довольно много проблем с настройкой nginx для обслуживания статических файлов моего приложения Rails; Я имею в виду все файлы в приложении public/ папка, а не только файлы в конвейере ресурсов Rails. Кажется, я могу заставить все работать в основном, но я не могу понять, как все собрать воедино. Мое приложение установлено в подкаталоге на сервере (/dashboard), а не веб-корень.

Вот выдержки из моих различных файлов конфигурации:

config.ru:

map Dashboard::Application.config.relative_url_root || "/" do
  run Rails.application
end

среды / production.rb:

config.relative_url_root = "/dashboard"
config.assets.prefix = "/dashboard/assets/"

nginx.conf:

location /dashboard/ {

    root /srv/XXX/dashboard/public;

    location /dashboard/assets/ {
        gzip_static on;
        expires max;
        add_header Cache-Control public;
    }

    try_files $uri @unicorn;

    error_page 500 502 503 504 /500.html;
    client_max_body_size 4G;
    keepalive_timeout 10;
}

location @unicorn {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://unicorn_server;
}

upstream unicorn_server {
    server unix:/srv/XXX/dashboard/tmp/sockets/unicorn.sock fail_timeout=0;
}

С этой конфигурацией я могу обслуживать само приложение Rails, используя единорога и файлы внутри public/assets/ папку с помощью nginx, но остальные файлы в public/ папка направляется в Rails и в конечном итоге возвращает код состояния 404. Я знаю, это потому, что сервер ищет (например) /dashboard/robots.txt который не существует внутри public/ папка. Я считаю, что мне нужно использовать alias чтобы управлять путями, однако я не смог собрать все вместе, чтобы Rails правильно обслуживал приложение, а nginx - статические файлы.