我只是按照以下说明在本地机器上安装新的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的问题。
最终结果:
- ruby-1.9.2-p180在这两个应用程序中都有gems
- ruby-1.9.2-p180@rails-3.0为您的3.0应用程序提供了宝石
- ruby-1.9.2-p180@rails-3.1为您的3.1应用程序提供了宝石
- 乘客使用的是卢布-1.9.2-p180
- bundler仍然应该限制每个应用程序可用的gem
- 两个应用程序都应该工作