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

Passenger + nginx: приложение не работает в производственном режиме

Я использую Passenger + Nginx для запуска приложения Rails. Если я использую "rails_env development;" приложение работает нормально.

Но если я работаю в производственном режиме, я получаю «К сожалению, что-то пошло не так».

Я запустил db: migrate для производства, и я могу получить доступ к базе данных в обычном режиме.

Странно то, что у меня нет новых записей в журналах (nginx и rails one), и я убедился, что пользователь nginx может писать в них.

Если я запускаю производство консоли rails, она работает нормально:

# rails console production
Loading production environment (Rails 3.2.0)
1.9.3-p125 :001 > 

Есть идеи о том, что может происходить? Что еще я должен проверить?

----Редактировать----

После предложения @BenLee о добавлении пассажира_debug_log_file в nginx.conf я начал получать эту ошибку для обоих разработка и производство:

# /etc/init.d/nginx restart
nginx: the configuration file /opt/nginx/conf/nginx.conf syntax is ok
nginx: [alert] Unable to start the Phusion Passenger watchdog: it seems to have crashed during startup for an unknown reason, with exit code 1 (-1: Unknown error)
nginx: configuration file /opt/nginx/conf/nginx.conf test is successful
Parando o nginx:                                           [  OK  ]
Iniciando o nginx: nginx: [alert] Unable to start the Phusion Passenger watchdog: it seems to have crashed during startup for an unknown reason, with exit code 1 (-1: Unknown error)
                                                           [  OK  ]

Я искал информацию об этой ошибке, но все еще не нашел решения. Похоже, Watchdog существует и находится в нужном месте:

# ls -lh /usr/local/rvm/gems/ruby-1.9.3-p125/gems/passenger-3.0.11/agents/
total 7,8M
drwxr-sr-x 2 root rvm 4,0K Fev 22 23:34 nginx
-rwxr-xr-x 1 root rvm 4,6M Fev 22 23:35 PassengerLoggingAgent
-rwxr-xr-x 1 root rvm 3,3M Fev 22 23:34 PassengerWatchdog

Если я удалю пассажир_debug_log_file, он запустится нормально. Но исходные проблемы возвращаются, приложение не запускается в производственном режиме.

Несмотря на то, что Фернандо, похоже, решил проблему путем обновления агентов, у меня была аналогичная проблема, но другое решение.

У меня также было такое поведение с приложением rails при использовании пассажира и nginx. Все нормально работало при настройке rails_env development; в nginx.conf. Однако при переходе от разработки к производству он больше не работал, и в соединении было отказано при попытке подключиться из браузера. Так или иначе, проблема была в файле production.rb и строке

config.force_ssl = true

Когда я это закомментировал, приложение работало в продакшене. И вместо настройки ssl в приложении rails я сделал это в nginx.conf.

Надеюсь, это поможет кому-то еще настроить приложение rails с пассажиром и nginx.

Похоже, это могло быть какое-то повреждение файла, возможно, находящееся в одном из агентов. Одна вещь, которая может помочь, - это переустановка свежих версий агентов. Вы можете сделать это через автономный пакет для пассажиров.

Для этого сначала подключитесь к серверу по SSH, а затем в любом каталоге (в приведенных ниже примерах я предполагаю, что это ваш домашний каталог, но подойдет любой каталог), запустите:

passenger package-runtime

Может показаться, что для этого потребуется много загрузки, настройки и установки, но не беспокойтесь. Все, что нужно сделать, это установить автономную версию для пассажиров в подкаталог с именем passenger-standalone. После выполнения этой команды вы должны увидеть такую ​​файловую структуру (при условии, что вы запустили команду в своем домашнем каталоге):

+ /home/you
    + passenger-standalone
        + 3.0.11-....
            nginx-x.y.z.tar.gz
            support.tar.gz

Так что это просто дерево с двумя файлами tar.gz (обратите внимание на 3.0.11-... не является буквальным, но начинается с этой строки - полное имя зависит от системы; аналогично x.y.z в одном из файлов tar.gz фактически будет номер версии). Затем распакуйте support.tar.gz, сделав что-то вроде этого:

cd passenger-standalone/3.0.11-....
tar xzvvf support.tar.gz

Это будет извлечено в текущий каталог. Среди прочего, это создаст agents подкаталог с двумя новыми файлами:

+ /home/you
    + passenger-standalone
        + 3.0.11-....
            + agents
                PassengerLoggingAgent
                PassengerWatchdog

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

cd agents
sudo chown root:rvm Passenger*

Затем сделайте резервную копию исходных агентов:

cd /usr/local/rvm/gems/ruby-1.9.3-p125/gems/passenger-3.0.11/agents
sudo cp PassengerLoggingAgent PassengerLoggingAgent.backup
sudo cp PassengerWatchdog PassengerWatchdog.backup

Наконец, переместите сюда свежие версии из автономного пакета.

sudo mv /home/you/passenger-standalone/3.0.11-..../agents/Passenger* .

Затем перезапустите nginx. Если по какой-то причине вам нужно отменить это, просто восстановите резервные копии и снова перезапустите nginx.

В качестве необязательного шага очистки вам больше не нужны эти автономные файлы, поэтому вы можете удалить их следующим образом:

rm -rf /home/you/passenger-standalone