假设我想在同一台服务器上托管 2 个 rails 应用程序。我将使用 RVM(安装为多用户)和两个不同的 gemset;假设 gemsetA 用于 appA,gemsetB 用于 appB。
使用 apache2 的 Passenger 模块来处理这种情况的最佳方法是什么?为每个 gemset 安装和编译 Passenger apache2 模块,还是创建另一个仅用于此目的的“passenger” gemset?
谢谢
PS:我已经读过了多个 Rails 站点使用 Passenger 和 VirtualHosts 吗?但我认为他没有使用 RVM,或者至少他只使用了一个 gemset。
答案1
我首先尝试将 Passenger 安装到全局 gemset 中:
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
指令。接下来,创建你的应用 gemsets:
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。如果有疑问,请咨询乘客证件。
如果你已经尝试过这个,但无法让它工作,其中一个应用程序找不到它的宝石……你可能需要考虑运行乘客独立。