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