#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! мне все еще нужно это делать?