1

曾经在我的 vps 中有这个红宝石列表:

   ruby-1.9.2-p320 [ i686 ]
=* ruby-1.9.3-p194 [ i686 ]
   ruby-1.9.3-p374 [ i686 ]
   ruby-1.9.3-p392 [ i686 ]

今天我在这个 vps 上安装了一个新应用程序ruby 2.0,所以我添加了 2.0 到rvm

   ruby-1.9.2-p320 [ i686 ]
   ruby-1.9.3-p194 [ i686 ]
   ruby-1.9.3-p374 [ i686 ]
   ruby-1.9.3-p392 [ i686 ]
=* ruby-2.0.0-p247 [ i686 ]

安装passengerpassenger-apache-module,说明说添加这些行:

   LoadModule passenger_module /usr/local/rvm/gems/ruby-2.0.0-p247/gems/passenger-4.0.19/buildout/apache2/mod_passenger.so
   PassengerRoot /usr/local/rvm/gems/ruby-2.0.0-p247/gems/passenger-4.0.19
   PassengerDefaultRuby /usr/local/rvm/wrappers/ruby-2.0.0-p247/ruby

并重新/etc/apache2/apache2.conf启动apache,重新启动后出现此错误

Syntax error on line 242 of /etc/apache2/apache2.conf:
Invalid command 'PassengerDefaultRuby', perhaps misspelled or defined by a module not included in the server configuration
Action 'configtest' failed.
The Apache error log may have more information.
   ...fail!

还有一个问题,当我在http://nccm.md打开我的应用程序时,我得到了:

Could not find rake-10.1.0 in any of the sources (Bundler::GemNotFound)

gem list命令我可以看到这个 gem 安装在 ruby​​ 2.0 环境中,但应用程序在usr/local/rvm/gems/ruby-1.9.3-p194@global. 这是为什么?感谢您的任何帮助。

4

1 回答 1

4

知道了!

你需要在根级别分配一个默认的 ruby​​,其他的你将在sites-enabled配置文件中设置。例如,在我的apache2.conf文件中:

   LoadModule passenger_module /usr/local/rvm/gems/ruby-2.0.0-p247/gems/passenger-4.0.19/buildout/apache2/mod_passenger.so
   PassengerRoot /usr/local/rvm/gems/ruby-2.0.0-p247/gems/passenger-4.0.19
   PassengerDefaultRuby /usr/local/rvm/wrappers/ruby-2.0.0-p247/ruby

然后/etc/apache2/sites-enabled/mysite启动应该在其中运行的应用程序,ruby-1.9.3我将添加PassengerRuby /usr/local/rvm/wrappers/ruby-1.9.3-p194/ruby

<VirtualHost xxx.xx.xx.xx:80>
  PassengerRuby /usr/local/rvm/wrappers/ruby-1.9.3-p194/ruby
  ServerName mysite.md
  DocumentRoot /home/apps/myapp/public
  <Directory /home/apps/myapp>
     AllowOverride None
     Options -MultiViews
  </Directory>
</VirtualHost>

对于ruby-2.0无需添加PassengerRuby选项的应用程序,ruby-2.0现在是默认选项。

此外,如果您在 apache2.config 文件中加载了其他 rvm 乘客模块,就像我的情况一样:

#   LoadModule passenger_module /usr/local/rvm/gems/ruby-1.9.3-p194/gems/passenger-3.0.18/ext/apache2/mod_passenger.so
#   PassengerRoot /usr/local/rvm/gems/ruby-1.9.3-p194/gems/passenger-3.0.18
#   PassengerRuby /usr/local/rvm/wrappers/ruby-1.9.3-p194/ruby

您需要像我一样删除它们或评论它们,因为您将在/etc/apache2/sites-enabled/mysite配置文件中加载 ruby​​ 版本。

笔记!

这仅适用于乘客 > 4.0.0。我已经在乘客 3.0.8 上对此进行了测试,但它不起作用。请注意,PassengerDefaultRuby 是在乘客版本 4.0.0 中引入的,请参阅 modrails.com/documentation/...。

于 2013-10-01T09:08:48.743 回答