我怎样才能 运行 两个 运行 两个 passenger 服务器在一个 apache 实例后面?

How can I run two run two passenger servers behind one apache instance?

为了运行 passenger behind apache,需要这两个指令:

PassengerRoot
PassengerDefaultRuby

根据文档 here,这两个具有 'server config' 上下文。这意味着 Apache 只能为整个服务器实例设置一个 ruby 版本和一个 passenger root。因为,我有两个 ruby 版本 运行ning 使用 RVM,每个 Rails 实例在其自己的虚拟主机上下文中 运行ning,有没有办法设置 PassengerRoot 和 PassengerDefaultRuby每个虚拟主机 ?

PS: Hack-ish 解决方案也是可以接受的。

不确定为什么需要设置不同的 PassengerRoot。你不应该需要这样做,Passenger root 可以在任何 ruby 版本上,而且它会正常工作。你应该只需要在虚拟主机中设置 PassengerRuby.

我们通过 RVM 为每个项目设置了 Rails 多个 Ruby versions/gemsets 设置,我们只需将 PassengerRuby 设置为:

<VirtualHost *:80>
  PassengerRuby /usr/local/rvm/gems/ruby-2.3.0@tomproject/wrappers/ruby
...
</VirtualHost>

只需确保将 PassengerRuby 指向 RVM gemset 中的相关包装器。

作为参考,这是我的 passenger.conf(Passenger 基于 ruby 2.1.1)

LoadModule passenger_module /usr/local/rvm/gems/ruby-2.1.1/gems/passenger-enterprise-server-5.0.21/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
 PassengerRoot /usr/local/rvm/gems/ruby-2.1.1/gems/passenger-enterprise-server-5.0.21
 PassengerDefaultRuby /usr/local/rvm/gems/ruby-2.1.1/wrappers/ruby
    PassengerStatThrottleRate 0

    # PassengerMaxPoolSize
    # Default: 6
    # For 2gb RAM: 30
    # For 256 slice with MySQL running: 2
    PassengerMaxPoolSize 12

    PassengerMinInstances 0
    PassengerPoolIdleTime 300
    PassengerMemoryLimit 400
</IfModule>

但有一件事 - 如果您为每个 gemset 安装了 Passenger - 不要。在默认 ruby 版本中全局安装它。以后会让你头疼。它仍然可以工作,但这不是最佳实践。

更多信息在这里:https://www.phusionpassenger.com/library/install/apache/install/oss/rubygems_rvm/#i-have-multiple-ruby-versions-or-gemsets.-does-it-matter-which-one-i-use-to-install-passenger-with?