如何在一个apache实例后面运行两个运行两个乘客服务器?

时间:2017-07-21 08:14:44

标签: ruby-on-rails ruby apache passenger virtualhost

为了在apache后面运行乘客,需要这两个指令:

PassengerRoot
PassengerDefaultRuby

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

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

1 个答案:

答案 0 :(得分:1)

不确定为什么需要设置不同的PassengerRoot。您不应该这样做,Passenger root可以真正使用任何ruby版本,它只会起作用。您只需要在虚拟主机中设置PassengerRuby。

我们通过RVM为每个项目集设置了多个Ruby版本/ gemset的Rails设置,我们只需将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>

但有一件事 - 如果你已经为每个宝石安装了乘客 - 不要。在默认的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