【发布时间】:2011-09-05 02:12:48
【问题描述】:
我安装了一些 gem,我正在尝试在 Ruby 应用程序中使用它们:
require 'rubygems'
require 'mygem'
但是,当我运行该应用程序时,我收到此错误:<internal:lib/rubygems/custom_require>:29:inrequire': no such file to load -- mygem (LoadError)`
但是,如果我尝试在 irb 中要求 gem(确保首先要求 'require 'rubygems'),它工作正常。我应该做些什么?我尝试用谷歌搜索这个问题,但不明白。
在ruby、gem 和irb 上运行which 表明它们都在/opt/local/bin/ 中,即,
> which ruby
/opt/local/bin/ruby
> which gem
/opt/local/bin/gem
> which irb
/opt/local/bin/irb
更新以回答提出的问题(是的,irb 和 ruby 指向不同的文件夹):
irb 中的$LOAD_PATH 和$: 似乎都指向ruby 1.8 文件夹:
/opt/local/lib/ruby/site_ruby/1.8
/opt/local/lib/ruby/site_ruby/1.8/i686-darwin10
/opt/local/lib/ruby/site_ruby
/opt/local/lib/ruby/vendor_ruby/1.8
/opt/local/lib/ruby/vendor_ruby/1.8/i686-darwin10
/opt/local/lib/ruby/vendor_ruby
/opt/local/lib/ruby/1.8
/opt/local/lib/ruby/1.8/i686-darwin10
.
$: in ruby 指向 ruby 1.9.1 文件夹:
/usr/local/lib/ruby/site_ruby/1.9.1
/usr/local/lib/ruby/site_ruby/1.9.1/i386-darwin9.8.0
/usr/local/lib/ruby/site_ruby
/usr/local/lib/ruby/vendor_ruby/1.9.1
/usr/local/lib/ruby/vendor_ruby/1.9.1/i386-darwin9.8.0
/usr/local/lib/ruby/vendor_ruby
/usr/local/lib/ruby/1.9.1
/usr/local/lib/ruby/1.9.1/i386-darwin9.8.0
gem env 显示
RubyGems Environment:
- RUBYGEMS VERSION: 1.4.1
- RUBY VERSION: 1.8.7 (2010-12-23 patchlevel 330) [i686-darwin10]
- INSTALLATION DIRECTORY: /opt/local/lib/ruby/gems/1.8
- RUBY EXECUTABLE: /opt/local/bin/ruby
- EXECUTABLE DIRECTORY: /opt/local/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86-darwin-10
- GEM PATHS:
- /opt/local/lib/ruby/gems/1.8
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :benchmark => false
- :backtrace => false
- :bulk_threshold => 1000
- "gempath" => ["/opt/local/lib/ruby/gems/1.8"]
- :sources => ["http://rubygems.org/", "http://gems.github.com", "http://gems.github.com"]
- REMOTE SOURCES:
- http://rubygems.org/
- http://gems.github.com
- http://gems.github.com
Gem.path in irb 指向
/Users/grautur/.gem/ruby/1.8
/usr/local/lib/ruby/gems/1.8
Gem.path in ruby 指向
/Users/grautur/.gem/ruby/1.9.1
/usr/local/lib/ruby/gems/1.9.1
【问题讨论】:
-
您的
$LOAD_PATH或$:变量包含什么?检查每个环境中的那些可能会提供相当丰富的信息。 -
嗯,irb 似乎在使用 ruby 1.8(
$LOAD_PATH和$:都是 /opt/local/lib/ruby/site_ruby/1.8,/opt/local/lib/ruby/site_ruby /1.8/i686-darwin10,/opt/local/lib/ruby/site_ruby,/opt/local/lib/ruby/vendor_ruby/1.8,/opt/local/lib/ruby/vendor_ruby/1.8/i686-darwin10,/opt /local/lib/ruby/vendor_ruby,/opt/local/lib/ruby/1.8,/opt/local/lib/ruby/1.8/i686-darwin10,.),而 ruby 使用的是 ruby 1.9.1 ($LOAD_PATH为空,$:是之前路径的 1.9.1 版本)。