为什么yaml在生产中无法使用?

在我的OS X开发系统上:

$ ruby --version ruby 1.8.6 (2007-03-13 patchlevel 0) [universal-darwin8.0] $ script/console Loading development environment (Rails 2.3.4) >> require 'yaml' => [] 

在CentOS 5.3生产系统上:

 $ script/console production Loading production environment (Rails 2.3.4) /opt/ruby-enterprise-1.8.7-2009.10/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/base.rb:1959:in `method_missing':NoMethodError: undefined method `define_index' for # >> require 'yaml' => false 

关于NoMethodError我能做些什么吗?

为什么yaml将无法使用。 它不是核心Ruby库的一部分吗?

返回false意味着加载成功或已经完成。 如果无法加载,则会引发exception。

它是Ruby核心库的一部分,但我不确定与Ruby Enterprise Edition捆绑在一起的是什么。 检查yaml.rb是否在$ LOAD_PATH中。 例如,在irb中尝试:

 $LOAD_PATH.collect { |path| File.join(path, 'yaml.rb') }.find { |path| File.exist?(path) } 

在OS X上它会产生如下内容:

 => "/opt/local/lib/ruby/1.8/yaml.rb"