Проблема с запуском Passenger с Nginx

#ruby-on-rails #nginx #passenger

#ruby-on-rails #nginx #пассажир

Вопрос:

Я только что настроил Passenger с Nginx, и, похоже, он устанавливается нормально, но когда я запускаю его, я пытаюсь запустить его с помощью:

 passenger start -e production
  

Я получаю:

 =============== Phusion Passenger Standalone web server started ===============
PID file: /root/rails_apps/myapp/tmp/pids/passenger.3000.pid
Log file: /root/rails_apps/myapp/log/passenger.3000.log
Environment: production
Accessible via: http://0.0.0.0:3000/

You can stop Phusion Passenger Standalone by pressing Ctrl-C.
===============================================================================
2011/04/18 07:17:27 [error] 9125#0: *4 "/root/rails_apps/myapp/public/index.html" is forbidden (13: Permission denied), client: 127.0.0.1, server: _, request: "HEAD / HTTP/1.1", host: "0.0.0.0"
  

и я получаю сообщение «Не удается подключиться», когда пытаюсь получить доступ к своему сайту в браузере.

Вот конфигурация в nginx.conf

    server {
      listen 80;
      server_name myapp.com;
      root /root/rails_apps/myapp/public;   # <--- be sure to point to 'public'!
      passenger_enabled on;
   }
  

есть идеи?

Ответ №1:

Похоже, эта ошибка вызвана тем, что пользователь nginx не может получить доступ к указанному файлу. Это может быть вызвано не только тем, что / root/rails_apps /myapp / public не имеет правильного разрешения, но даже если в одном из родительских каталогов его нет!

В вашем nginx.conf вы можете увидеть что-то вроде:

 user nginx;

http {
    # blah.
}
  

Иногда параметр user может отличаться. Убедитесь, что все папки доступны этому пользователю по указанному пути.
Вы можете проверить это с помощью sudo -Hu nginx /bin/bash -l и cat /root/rails_apps/myapp/public/index.html . Тестируйте и повторяйте с помощью этой команды, пока не перестанете видеть содержимое файла.

Небольшое пояснение: с помощью этой команды sudo вы запускаете оболочку от имени пользователя nginx. И с помощью cat команды вы можете имитировать чтение файла.

Ответ №2:

Попробуйте это:

 sudo passenger start -e production
  

Комментарии:

1. попробуйте изменить разрешение /root/rails_apps/myapp/public каталога на 755.

2. @Surya Менять его на 755 — плохая идея, это сработало бы, но не идеально для производственной среды. Вероятно, вам просто нужно передать файлы, о которых идет речь, в nginx: nginx или в любом другом приложении, на котором запущен nginx, оставив файлы 644.

Ответ №3:

поскольку указанный вами путь находится в /root (/root/rails_apps / myapp / public), у nginx должно быть достаточно разрешений:

user root ; в nginx.conf

вы также должны запустить nginx от имени суперпользователя (sudo)

но, возможно, было бы лучше просто переместить ваше приложение rails куда-нибудь в каталог вашего пользователя и предоставить необходимые разрешения пользователю nginx по умолчанию «www-data»

 user www-data;
  

Комментарии:

1. Я запускаюсь от имени root! мне все еще нужно это делать?