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

Как использовать Passenger (модуль apache2) с 2+ приложениями Rails, используя каждый из разных гемсетов

Предположим, я хочу разместить 2 приложения rails на одном сервере. Я бы использовал RVM (установленный как многопользовательский) и два разных гемсета; предположим, что gemsetA для appA и gemsetB для appB.

Как лучше всего справиться с этой ситуацией с помощью модуля Passenger для apache2? Установить и скомпилировать пассажирский модуль apache2 для каждого гемсета или создать другой «пассажирский» гемсет, используемый только для этой цели?

Спасибо

PS: я уже читал это Несколько сайтов на Rails, использующих Passenger и VirtualHosts? но я думаю, что он не использует RVM или, по крайней мере, он использует только один гемсет.

Я сначала попробую установить пассажира в глобальный гемсет:

rvm use ree@global --default --passenger
rvm ree@global gem install passenger --version="${PASSENGER_VERSION}"
passenger-install-apache2-module --auto --apxs2-path $(which apxs2)
passenger-install-apache2-module --snippet >> /etc/apache2/conf.d/passenger.conf

В зависимости от ваших прав доступа к файлу вам может потребоваться или не нужно добавлять PassengerGroup www-data директива. Затем создайте гемсеты своего приложения:

rvm use ree@gemsetA --create
rvm ree@gemsetA gem install ${appA_gems}
rvm use ree@gemsetB --create
rvm ree@gemsetA gem install ${appB_gems}
# Must use .rvmrc files to change gemset per app
echo "rvm use ree@gemsetA" >> /path/to/appA/.rvmrc
echo "rvm use ree@gemsetB" >> /path/to/appB/.rvmrc

Наконец, настройте apache, чтобы каждое приложение получало собственный VirtualHost. Используйте аналогичный набор директив в блоке VirtualHost:

    RackBaseURI /path/to/app(A|B)

    <Directory /path/to/app(A|B)>
        PassengerAppRoot /path/to/app(A|B)
        Options -MultiViews
        AllowOverride all
        Allow from all
    </Directory>

Возможно, вам придется поиграть с путями для RackBaseURI и PassengerAppRoot в зависимости от того, где вы установили свое приложение, будь то Rack или другое, или от того, как вы настроили Apache. В случае сомнений обратитесь к Документация для пассажиров.

Если вы уже пробовали это, и не смогли заставить его работать, а одно из приложений не может найти его драгоценные камни ... вам может потребоваться запустить Автономный пассажирский.