Rails Пассажирская проблема с Apache2 - PullRequest
20 голосов
/ 11 июня 2011

Я пытаюсь настроить ruby ​​на сервере rails на ubuntu10.10 с apache2 и mod_rails (Phusion Passenger).

Я уже установил ruby ​​1.9.2-p0 и рельсы 3.0.8 и установил Passenger с модулем passenger-install-apache2 и gem пассажира (v3.0.7).

Затем он говорит мне добавить 3 строки в мой файл конфигурации Apache. Поэтому я добавил эти строки в '/etc/apache2/apache2.conf':

LoadModule passenger_module /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.7/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/gems/1.9.1/gems/passenger-3.0.7
PassengerRuby /usr/local/bin/ruby

И я отредактировал мой /etc/apache2/httpd.conf и добавил:

NameVirtualHost *:80

<VirtualHost *:80>
ServerName 192.168.0.2
DocumentRoot /var/www/webop/public

<Directory /var/www/webop/public>
Allow from all
Options -MultiViews
</Directory>
</VirtualHost>

Я также обнаружил, что файл mod_passenger.so в /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.7/ext/apache2/ на самом деле не существует, его имя - mod_passenger .c. Но я не получаю ошибок от этого.

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

Когда я перезапускаю apache, он говорит мне, что mod_rails уже загружен, поэтому я предполагаю, что пассажир работает, но я не могу понять, почему он не запускает мое приложение!

Заранее спасибо!

Ответы [ 4 ]

38 голосов
/ 19 сентября 2012

Причина, по которой mod_passenger.so не существует, заключается в том, что вы не установили модуль Apache.Выполните:

passenger-install-apache2-module

Это создаст файл mod_passenger.so внутри вашего каталога gem и даст вам три строки для копирования в файл apache2.conf.

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

12 голосов
/ 13 июня 2011

Я наконец понял, в чем проблема: я испортил мою установку ruby.

В / usr / local / у меня был установлен ruby1.9.2-p0 (это была версия, которую я хотел использовать), но в / usr / i был установлен ruby1.8.7.

Пассажир был озадачен тем, какую версию ruby ​​использовать, поэтому я изменил пути LoadModule, PassengerRoot и PassengerRuby внутри apache2 / mods-enabled / passenger.load и .config на правильные пути, и это наконец-то сработало! Оба файла были созданы автоматически, что также вызвало проблему переопределения: при запуске apache появилось предупреждение «mod_passenger уже загружен». Итак, я удалил

LoadModule passenger_module /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.7/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/gems/1.9.1/gems/passenger-3.0.7
PassengerRuby /usr/local/bin/ruby

из конфига apache и предупреждение исчезло!

Возможно, это когда-нибудь поможет кому-то другому!

3 голосов
/ 10 августа 2015

Сегодня я нашел более чистое решение. Это может помочь будущим пользователям. Команда -

passenger-install-apache2-module

говорит мне поместить эти три строки в файл конфигурации apache.

LoadModule passenger_module /home/anwar/.rvm/gems/ruby-2.2.0/gems/passenger-4.0.59/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /home/anwar/.rvm/gems/ruby-2.2.0/gems/passenger-4.0.59
     PassengerDefaultRuby /home/anwar/.rvm/gems/ruby-2.2.0/wrappers/ruby
   </IfModule>

Но где этот файл конфигурации? Ответ , файлы конфигурации разделены на множество частей и они находятся в /etc/apache2/mods-available.

Итак, вы должны сделать три вещи -

  1. Создайте файл, заканчивающийся .load в папке /etc/apache2/mods-available. Я использовал passenger.load.

  2. Вставьте три строки в этот файл и сохраните файл.

  3. Теперь в терминале используйте sudo a2enmod <module-conf-filename> для включения модуля. В моем случае файл был passenger.load. Итак, я использовал

    sudo a2enmod passenger
    

Теперь перезапустите сервер и с помощью команды apache2ctl -M обнаружите, что модуль passenger включен.

1 голос
/ 12 июня 2011

Я думаю, что они хотят, чтобы вы поместили эти три строки в ваш файл httpd.conf, а не в ваш apache2.conf. По крайней мере, так я всегда делал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...