重新启动Passenger上部署的rails app时切换ruby

时间:2011-04-05 19:08:07

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

重新启动部署在Passenger上的Rails应用程序时,是否可以从Ruby 1.8.7切换到1.9.2?应该可以在httpd.conf中更改PassengerRuby并重新启动Apache。我想知道如何在不重新启动Apache的情况下完成它。

更多信息:我们有两个不同的应用程序,一个在Rails 2.3.8上,一个在3.0.5上,具有相同的名称,并且希望在它们之间进行切换以进行测试。

感谢。

3 个答案:

答案 0 :(得分:1)

您不需要重新编译。您只需更改Web服务器中的PassengerRuby选项即可。您确实需要重新启动Web服务器,但只需触摸restart.txt即可。

您还可以使用Passenger Standalone替代bioneuralnet提到的Thin / Mongrel / Unicorn反向代理设置。事实上,我们有一篇专门使用Passenger Standalone运行多个Ruby版本的博客文章:http://blog.phusion.nl/2010/09/21/phusion-passenger-running-multiple-ruby-versions/

答案 1 :(得分:1)

是的,你可以切换你使用的ruby版本。使用rvm(http://rvm.beginrescueend.com/)时,生活很简单。然后,您可以在不同的ruby环境中安装乘客gem,当您在每个环境中执行它时,passenger-install-apache2-module命令将告诉您将什么放入apache配置文件中。例如,我的是现在(mac osx - 在其他* nixes中应该类似):

### system ruby and passenger
#LoadModule passenger_module /Library/Ruby/Gems/1.8/gems/passenger-3.0.7/ext/apache2/mod_passenger.so
#PassengerRoot /Library/Ruby/Gems/1.8/gems/passenger-3.0.7
#PassengerRuby /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby

### rvm gemset 1.8.7@rails2.3.11 ruby and passenger
LoadModule passenger_module /Users/matt/.rvm/gems/ruby-1.8.7-p334@rails2.3.11/gems/passenger-3.0.7/ext/apache2/mod_passenger.so
PassengerRoot /Users/matt/.rvm/gems/ruby-1.8.7-p334@rails2.3.11/gems/passenger-3.0.7
PassengerRuby /Users/matt/.rvm/wrappers/ruby-1.8.7-p334@rails2.3.11/ruby

我可以评论/取消注释相应的一个,并使用不同版本的ruby重新启动apache。这也适用于ruby 1.9.2和ruby企业版。

答案 2 :(得分:0)

由于Passenger将其自身“嵌入”到Apache中,我不能在没有重启的情况下切换ruby解释器(甚至可能重新编译Passenger?)。为了达到这种灵活性,您可能需要研究某种反向代理设置,包括在Apache或Nginx后面运行的独立应用服务器,如Thin,Unicorn或Mongrel。

如果这是不可能的,那么Rails 2.3.8和3.0.5应用程序都可以在Ruby 1.8.7上运行。我在1.8.7上部署了几个Rails 3应用程序,但希望很快就会改变。假设您的3.0.5应用程序没有明确的1.9依赖项,为什么不能在单独的虚拟主机中将它们并行运行在1.8?