custom_require.rb:36:在`gem_original_require'中

时间:2012-04-09 05:59:59

标签: ruby ruby-on-rails-3 rubygems jruby

虽然我安装了gem,但我收到了以下错误

/rbing.rb:4: uninitialized constant RBing (NameError)
from /Users/bhushan/.rvm/rubies/ruby-1.8.7-p352/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
from /Users/bhushan/.rvm/rubies/ruby-1.8.7-p352/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
from rbing.rb:3

此错误仅适用于Ruby 1.8.7Jruby同一文件适用于1.9.2。什么可能被打破?

rbing.rb文件看起来像这样

require 'rubygems'
require 'rbing'
bing = RBing.new("APPID")

rsp = bing.web('infosys', :site => "linkedin.com")
puts rsp.web.results[0].url

1 个答案:

答案 0 :(得分:1)

在Ruby 1.8中,当前目录位于加载路径中。所以当你说require 'rbing'时,Ruby不会使用rbing gem,而是查看当前目录,查看名为rbing.rb的文件(这是当前文件),然后重新加载它。因此,当它命中RBing的引用时,Ruby不知道该怎么做,因为它从未被定义过。 (显然,JRuby会发生同样的事情,虽然这可能取决于您使用的是哪个版本。)您在Ruby 1.9中没有看到此错误,因为当前目录不在加载路径中,因此Ruby将跳过当前文件需要rbing gem。

您可以将此行放在文件顶部来确认:

puts "#{__FILE__} was required"

1.9以下,应该说

rbing.rb was required

在1.8和JRuby下,这应该说

rbing.rb was required
./rbing.rb was required

(然后以uninitialized constant RBing失败)。

tl; dr:将您的文件命名为其他内容。