Настройте nginx.conf для Rails, показывает, что каталог файлов не индекс - PullRequest
2 голосов
/ 08 декабря 2011

Вот что у меня есть в моем nginx.conf:

#user  nobody;
worker_processes  1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
    worker_connections  1024;
     }
http {
    passenger_root /usr/lib/ruby/gems/1.9.1/gems/passenger-3.0.11;
    passenger_ruby /usr/bin/ruby;
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;

    gzip  on;
    gzip_http_version 1.1;
    gzip_comp_level 2;
    gzip_types    text/plain text/html text/css
                  application/x-javascript text/xml
                  application/xml application/xml+rss
                  text/javascript;
    server {
        listen       80;
        server_name  domain.com www.domain.com;

        # autoindex on;
        passenger_enabled on;
        rails_env production;

        access_log  logs/mrfs.access.log;

        location / {
            root   /opt/nginx/html/mrfs/public; #line updated per suggestion below
        }

        }
  }

Я могу включать и выключать автоиндекс, и он будет отображать ошибку 403, когда он закомментирован, или список каталогов, когда он включен. Когда у меня есть доступ к спискам каталогов, я могу просматривать их и загружать различные файлы. Мне кажется, что это не проблема с разрешениями. Когда у меня отключен автоматический индекс, я получаю сообщение об ошибке каталога в журнале ошибок. Я думаю, что мне нужно сделать, это сказать nginx, как загрузить мой файл index.html.erb? Как я могу это сделать? Это то, что не так?

Обновление

Я помещаю «index.html» в мою папку / opt / nginx / html / mrfs / public, и она загружается. Так что может заставить rails / nginx / passenger загружать файл index.html публично, но не загружать файл home.html.erb в мои маршруты? Я могу запустить 'rails s', а затем сделать wget http://localhost, и он откроет нужный HTML-файл.

Ответы [ 3 ]

3 голосов
/ 08 декабря 2011

Вам необходимо установить root в каталог public вашего проекта:

server {
    ...
    passenger_enabled on;
    rails_env production;
    root   /opt/nginx/html/mrfs/public;
}
2 голосов
/ 08 декабря 2011

Вот что я должен был изменить:

server {
        listen       80;
        server_name  domain.com www.domain.com;
        rails_env production;
        passenger_use_global_queue on;
        access_log  logs/mrfs.access.log;
         root   /opt/nginx/html/mrfs/public;
        passenger_enabled on;
       error_page  404              /404.html;
       error_page   500 502 503 504  /50x.html;
    }

}

Если у вас есть location / в вашем nginx.conf, то вы должны включить passenger_enabled;внутри этого или иначе удалите блок location /.Я решил удалить его.

1 голос
/ 08 декабря 2011

В дополнение к исправлению «общедоступной» папки в другом ответе мне кажется, что существует проблема с правами доступа / владением папками, содержащими ваше приложение.В файле nginx.conf должна быть строка, подобная ...

user websrv;

, которая определяет пользователя, под которым запускается nginx.Папка с вашим приложением rails должна принадлежать этому пользователю, и права доступа должны быть установлены соответствующим образом.

...