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

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

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

Спасибо

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

1 ответ

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

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. В случае сомнений обратитесь к документации для пассажиров.

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

Другие вопросы по тегам