已安装Ruby gem,但无法要求

时间:2017-05-06 14:17:52

标签: ruby rubygems

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

~/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显示我期望的gem路径,因为我正在使用rbenv:

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并移除所有宝石并重新安装。

我觉得这是愚蠢的事,但是有人能看到我在这里做错了会导致红宝石无法找到这些宝石吗?

谢谢!

更新

不知道为什么我之前没有提到这个,但是在我的剧本的顶部我有:

#!/usr/bin/ruby

我不确定为什么之前有效,现在不是。

感谢大家的帮助:)。

3 个答案:

答案 0 :(得分:1)

每当您尝试运行该文件时,它都会在Ruby 2.0目录中查找gem。只要你gem env它显示2.4.1作为你的红宝石版本。

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

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

答案 1 :(得分:0)

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

尝试创建一个新文件夹,使用local rbenv <version>在本地设置ruby 2.4,然后尝试再次提出要求。

答案 2 :(得分:0)

当您键入./whois.rb时,您调用ruby系统。

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