为了在apache后面运行乘客,需要这两个指令:
PassengerRoot
PassengerDefaultRuby
这两个人有一个服务器配置'根据文档here的上下文。这意味着Apache只能为整个服务器实例设置一个ruby版本和一个乘客根。因为,我有两个使用RVM运行的ruby版本,并且每个Rails实例都在自己的虚拟主机上下文中运行,有没有办法为每个虚拟主机设置PassengerRoot和PassengerDefaultRuby?
PS:Hack-ish解决方案也是可以接受的。
答案 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版本中全局安装它。以后会让你头疼。它仍然可以工作,但它不是最好的做法。