使用passenger同时运行Rails3.0和Rails3.1应用程序(使用不同的rvm-gemset)



我只是按照以下说明在本地机器上安装新的rvm gemset和rails-3.1.0.rc2。起初,我收到一个Passenger错误,说rake-0.9.2宝石无法加载,但我发现这提醒我运行"$Passenger-install-apache2-module"。它安装得很好,提示我将以下内容添加到Apache配置文件(/etc/apache2/httpd.conf)中:

LoadModule passenger_module /Users/robs/.rvm/gems/ruby-1.9.2-p180@rails-3.1/gems/passenger-3.0.7/ext/apache2/mod_passenger.so
PassengerRoot /Users/robs/.rvm/gems/ruby-1.9.2-p180@rails-3.1/gems/passenger-3.0.7
PassengerRuby /Users/robs/.rvm/wrappers/ruby-1.9.2-p180@rails-3.1/ruby

然而,已经有三条线来自不同的宝石集:

LoadModule passenger_module /Users/robs/.rvm/gems/ruby-1.9.2-p180@rails-3.0/gems/passenger-3.0.7/ext/apache2/mod_passenger.so
PassengerRoot /Users/robs/.rvm/gems/ruby-1.9.2-p180@rails-3.0/gems/passenger-3.0.7
PassengerRuby /Users/robs/.rvm/wrappers/ruby-1.9.2-p180@rails-3.0/ruby

如果我不注释这两组行(@rails-3.1的gemset是最后一个),然后重新启动Apache,我的rails 3.0应用程序就不会启动。我发现自己不得不注释掉rails 3.1 gemset行,重新启动Apache,然后运行"$rvm useruby-1.9.2-p180@rails.3.0".如果我想运行Rails 3.1应用程序,我必须做相反的事情。

有没有一种方法可以让两者在没有这些额外步骤的情况下同时运行?

您可以告诉Passenger在没有gemset的情况下使用ruby 1.9.2,然后在每个应用程序中运行rvm,使用ruby-1.9.2-p180并捆绑安装。这意味着您的基本ruby-1.9.2-p180将具有用于这两个应用程序的gem,bundler应该处理限制应用程序可用的gem的问题。

最终结果:

  1. ruby-1.9.2-p180在这两个应用程序中都有gems
  2. ruby-1.9.2-p180@rails-3.0为您的3.0应用程序提供了宝石
  3. ruby-1.9.2-p180@rails-3.1为您的3.1应用程序提供了宝石
  4. 乘客使用的是卢布-1.9.2-p180
  5. bundler仍然应该限制每个应用程序可用的gem
  6. 两个应用程序都应该工作

相关内容

  • 没有找到相关文章

最新更新