如何在 2 个以上的 Rails 应用程序中使用 Passenger(apache2 模块),每个应用程序使用不同的 gemset

如何在 2 个以上的 Rails 应用程序中使用 Passenger(apache2 模块),每个应用程序使用不同的 gemset

假设我想在同一台服务器上托管 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>

您可能需要尝试使用 和 的路径RackBaseURIPassengerAppRoot具体取决于您安装应用程序的位置、它是基于 Rack 还是其他,或者您如何配置 Apache。如果有疑问,请咨询乘客证件

如果你已经尝试过这个,但无法让它工作,其中一个应用程序找不到它的宝石……你可能需要考虑运行乘客独立

相关内容