【问题标题】:Gem found in irb, not in Ruby宝石在 irb 中发现,而不是在 Ruby 中
【发布时间】: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'),它工作正常。我应该做些什么?我尝试用谷歌搜索这个问题,但不明白。

rubygemirb 上运行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 版本)。

标签: ruby rubygems


【解决方案1】:

您必须在游戏文件中添加gem install mygem,然后运行bundle install 命令。执行此操作后,您的应用程序将正常工作。

【讨论】:

    【解决方案2】:

    我有a similar problem。我最终找到的解决方案是在我的系统上设置rvm(ruby 版本管理器)并使用它来设置新的 ruby​​ 环境。它还可以轻松地在宝石组的 ruby​​ 版本之间切换。

    【讨论】:

      【解决方案3】:

      我不确定发生了什么。但是,以下可能会有所帮助。

      在irb中,做

      require 'rubygems'
      require 'mygem'
      puts $:
      

      然后,在 ruby​​ 中,做

      require 'rubygems'
      puts $:
      

      如果你还没有解决,请告诉我们你得到了什么。

      编辑:同样在命令行打印出gem env的结果。

      编辑 2: 看看如果在 irb 和 ruby​​ 中都需要 ruby​​gems 后输入 puts Gem.path 会发生什么。见thanks to Matt for describing Rubygems

      【讨论】:

      • 嗯,是的,ruby 和 irb 似乎使用不同的路径(ruby 使用 1.9.1 文件夹,irb 使用 1.8 文件夹)。你知道我如何让他们使用相同的路径吗?
      • @grautur:我不知道该怎么办。对不起。
      【解决方案4】:

      您可以尝试在 require 之前添加 gem 'mygem',但这不是必需的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-23
        • 2011-11-16
        • 2011-03-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多