Проблема с Rails Passenger с Apache2
Я пытаюсь настроить ruby на сервере rails на ubuntu10.10 с apache2 и mod_rails (Phusion Passenger).
Я уже установил ruby 1.9.2-p0 и rails 3.0.8 и установил "Пассажир" с модулем "пассажир-install-apache2" и самолетом-пассажиром (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/apache 2/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//ext/apache2/фактически не существует, его имя - mod_passenger.c. Но я не получаю от этого никаких ошибок.
Сервер должен быть доступен только через локальную сеть. Когда я обращаюсь к серверу, я вижу все файлы и каталоги в общей папке моего приложения, но само приложение не запускается.
Когда я перезапускаю apache, он говорит мне, что mod_rails уже загружен, поэтому я предполагаю, что пассажир работает, но я не могу понять, почему он не запускает мое приложение!
Спасибо заранее!
Ответы
Ответ 1
Наконец-то я выяснил, в чем проблема: я испортил свою рубиновую установку.
В/usr/local/у меня был установлен ruby1.9.2-p0 (это была версия, которую я хотел использовать), но в /usr/i был установлен ruby1.8.7.
Пассажир запутался в том, какую версию Ruby использовать, поэтому я изменил пути LoadModule, PassengerRoot и PassengerRuby в apache2/mods-enabled/пассажир .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 и предупреждение исчезло!
Возможно, это когда-нибудь поможет кому-то еще!
Ответ 2
Причина mod_passenger.so не существует, потому что вы не установили модуль Apache. Выполнение:
passenger-install-apache2-module
Это создаст файл mod_passenger.so внутри вашего каталога gem и даст вам три строки для копирования в ваш файл apache2.conf.
Пассажирский модуль установлен в вашем текущем gemset, чтобы не возникало конфликтов между проектами. Вы можете использовать любую совместимую версию Ruby и любой gemset, который вам нравится, через RVM и, возможно, RBENV. Это обеспечивает хороший легкий путь обновления от одной версии Ruby до следующего.
Ответ 3
Сегодня я столкнулся с более чистым решением. Это может помочь будущим пользователям. Команда -
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
.
Итак, вы должны сделать три вещи -
-
Создайте файл, заканчивающийся на .load
в папке /etc/apache2/mods-available
. Я использовал passenger.load
.
-
Вставьте три строки в этот файл и сохраните файл.
-
Теперь в терминале используйте sudo a2enmod <module-conf-filename>
, чтобы включить модуль. В моем случае файл был, passenger.load
. Итак, я использовал
sudo a2enmod passenger
Теперь перезапустите сервер и используйте команду apache2ctl -M
, чтобы найти, что модуль passenger
включен.
Ответ 4
Я думаю, они хотят, чтобы вы поместили эти три строки в свой файл httpd.conf, а не в apache2.conf. По крайней мере, так, как я всегда это делал.