【问题标题】:Ruby gem installed, but unable to require it已安装 Ruby gem,但无法要求它
【发布时间】:2017-05-07 09:41:15
【问题描述】:

我已经安装了许多 gem,但是当我去“要求”它们时,我得到“没有这样的文件来加载错误”:

~/Documents/Projects/Ruby Scripts/Domain » ./whois.rb
/System//Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in 'require': cannot load such file -- whois (LoadError)
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from ./whois.rb:3:in `<main>'

我已经安装了 gem,它似乎已经安装成功:

~ » gem install whois
Fetching: whois-4.0.1.gem (100%)
Successfully installed whois-4.0.1
Parsing documentation for whois-4.0.1
Installing ri documentation for whois-4.0.1
Done installing documentation for whois after 0 seconds
1 gem installed

运行gem list 显示安装为本地gem 的gem:

*** LOCAL GEMS ***

activesupport (5.1.0)
addressable (2.5.1)
...
whois (4.0.1)

运行 gem env 显示了我在使用 rbenv 时所期望的 gem 路径:

RubyGems Environment:
  - RUBYGEMS VERSION: 2.6.11
  - RUBY VERSION: 2.4.1 (2017-03-22 patchlevel 111) [x86_64-darwin16]
  - INSTALLATION DIRECTORY: /Users/perfektion/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0
  - USER INSTALLATION DIRECTORY: /Users/perfektion/.gem/ruby/2.4.0
  - RUBY EXECUTABLE: /Users/perfektion/.rbenv/versions/2.4.1/bin/ruby
  - EXECUTABLE DIRECTORY: /Users/perfektion/.rbenv/versions/2.4.1/bin
  - SPEC CACHE DIRECTORY: /Users/perfektion/.gem/specs
  - SYSTEM CONFIGURATION DIRECTORY: /Users/perfektion/.rbenv/versions/2.4.1/etc
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-darwin-16
  - GEM PATHS:
     - /Users/perfektion/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0
     - /Users/perfektion/.gem/ruby/2.4.0
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - https://rubygems.org/
  - SHELL PATH:
     - /Users/perfektion/.rbenv/versions/2.4.1/bin
     - /usr/local/Cellar/rbenv/1.1.0/libexec
     - /Users/perfektion/.rbenv/shims
     - /Users/perfektion/.rbenv/bin
     - /Users/perfektion/.rbenv/shims
     - /Users/perfektion/.rbenv/bin
     - /usr/local/bin
     - /usr/bin
     - /bin
     - /usr/sbin
     - /sbin

检查 gem whois 的 gem 路径,我可以看到它位于那里。

奇怪的是,虽然 irb 似乎能够找到宝石:

~/ » irb
irb(main):001:0> require 'whois'
=> true
irb(main):002:0> whois = Whois::Client.new
=> #<Whois::Client:0x007fbc121074c8 @timeout=10, @settings={}>

我已经解决这个问题大约 24 小时了,我觉得我疯了。此问题仅在过去 24-48 小时内变得明显。在此之前,我使用的脚本运行良好。

可能有用的信息

  • 运行 OSX Sierra 10.12.4
  • 我正在使用 rbenv 和 ruby​​-build
  • 使用 Ruby 2.4.1 全局设置
  • 路径 = /Users/perfektion/.rbenv/shims:/Users/perfektion/.rbenv/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
  • 重新安装 rbenv、ruby-build、ruby 并删除所有 gem 并重新安装。

我觉得这很愚蠢,但是谁能看到我在这里做错了什么会导致 ruby​​ 无法找到这些宝石?

谢谢!

更新

不知道为什么我没有早点选择这个,但在我的脚本顶部我有:

#!/usr/bin/ruby

我不知道为什么这之前有效,现在无效。

感谢大家的帮助:)

【问题讨论】:

    标签: ruby rubygems


    【解决方案1】:

    每当您尝试运行该文件时,它都会在 Ruby 2.0 目录中寻找 gem。每当您执行 gem env 时,它都会显示 2.4.1 作为您的 ruby​​ 版本。

    请记住,使用 rbenv 您可以设置要运行的 ruby​​ 的本地、全局或 shell 级别版本:https://github.com/rbenv/rbenv#rbenv-local

    您还可以在目录中创建.ruby-version 文件,rbenv 将查找该文件并使用该版本(如果存在)。您用于安装 gem 的 ruby​​ 版本与用于运行 whois 脚本的 ruby​​ 版本之间存在问题。

    【讨论】:

    • 感谢您的确认。在连续几个小时盯着错误之后,我有点忽略了错误报告不同版本的 ruby​​ 的事实。我仍然不确定为什么执行 ./whois.rb 不再调用 rbenv 版本。
    【解决方案2】:

    因为 ruby​​ 试图从另一个路径获取库,该路径与您使用 rbenv 安装 wois gem 的路径不同。 (我不知道 rvm 和 rbenv 可能有什么冲突。)

    尝试创建一个新文件夹,使用local rbenv &lt;version&gt;在本地设置ruby 2.4,然后再次尝试make require。

    【讨论】:

    • 我已经尝试过了,它没有任何区别。据我所知,运行rbenv global 2.4.1,这将设置 ruby​​ 版本 2.4.1 几乎可以在任何地方使用?
    【解决方案3】:

    当你输入 ./whois.rb 时,你调用了 ruby​​ 系统。

    尝试使用ruby ./whois.rb 它将调用 RVM/rbenv 加载的 ruby​​ 系统

    【讨论】:

    • 这对我有用!但是我不知道为什么 ./whois.rb 会突然停止在我的系统上工作...:/
    • @Perfektion 可能之前您将 rbenv 版本加载为系统一。我不知道该怎么做,但应该是这个local rbenv &lt;version&gt; 命令
    • 绝对有可能!我通常坚持使用 rbenv 将一个版本的 ruby​​ 设置为全局,但谁知道我做了什么!谢谢大家的帮助:)
    猜你喜欢
    • 2017-09-20
    • 2011-03-24
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多