'require':无法加载此类文件'gem'(LoadError)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了'require':无法加载此类文件'gem'(LoadError)相关的知识,希望对你有一定的参考价值。

我意识到有很多问题与此相同,但我没有成功解决我的问题。我正在尝试使用gem'vpn',为了学习目的,我想我会开辟一个全新的项目。按照以下安装说明:https://github.com/ronen/vpn(gem也在rubygems.org上)并在我的代码中需要gem,我得到require': cannot load such file -- vpn (LoadError)

我已经验证了我的版本。 gem env给出

RubyGems Environment:
  - RUBYGEMS VERSION: 2.7.7
  - RUBY VERSION: 2.5.1 (2018-03-29 patchlevel 57) [x86_64-darwin17]
  - INSTALLATION DIRECTORY: /Users/user/.rvm/gems/ruby-2.5.1
  - USER INSTALLATION DIRECTORY: /Users/user/.gem/ruby/2.5.0
  - RUBY EXECUTABLE: /Users/user/.rvm/rubies/ruby-2.5.1/bin/ruby
  - EXECUTABLE DIRECTORY: /Users/user/.rvm/gems/ruby-2.5.1/bin
  - SPEC CACHE DIRECTORY: /Users/user/.gem/specs
  - SYSTEM CONFIGURATION DIRECTORY: /Users/user/.rvm/rubies/ruby-2.5.1/etc
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-darwin-17
  - GEM PATHS:
     - /Users/user/.rvm/gems/ruby-2.5.1
     - /Users/user/.rvm/gems/ruby-2.5.1@global
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - https://rubygems.org/
  - SHELL PATH:
     - /Users/user/.rvm/gems/ruby-2.5.1/bin
     - /Users/user/.rvm/gems/ruby-2.5.1@global/bin
     - /Users/user/.rvm/rubies/ruby-2.5.1/bin
     - /Users/user/.rvm/bin
     - /Library/Frameworks/Python.framework/Versions/3.7/bin
     - /Library/Frameworks/Python.framework/Versions/3.7/bin
     - /usr/local/bin
     - /usr/bin
     - /bin
     - /usr/sbin
     - /sbin
     - /Applications/Wireshark.app/Contents/MacOS

ruby --versionruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin17]

在我的宝石文件中,我有gem: 'vpn'

gem list确实返回vpn (0.2.1)

任何帮助将不胜感激。提前致谢。

我尝试过的:

P.S我没有rake文件。我没有设置一个因为我不太确定它会解决我的问题而且我在找到如何创建问题时遇到了问题。

答案

这里的问题似乎与vpn宝石的结构方式有关。现代宝石有一种模式:

  • 可执行文件放在gem中的bin / exe目录中
  • Ruby代码放在gem中<gem-name>.rb目录下的libfile中

因此,当用户调用require <gem-name>时,Ruby会尝试加载<gem-name>-<gem-version>/lib/<gem-name>.rb并返回LoadError(如果没有)。 例如,当用户在gem 'jekyll', '3.8.0'中列出Gemfile时,Ruby将首先尝试加载jekyll-3.8.0/lib/jekyll.rb

对于Ruby加载另一个目录而不是~/lib/<gem-name>.gemspec应该通过require_paths=设置指定。 例如,要加载david.rb上安装的david-rb文件(来自0.1.0版本的~/gems/david-rb-0.1.0/code/david.rb的假设宝石),david-rb.gemspec应该具有以下内容:

Gem::Specification.new do |s|
  # preceding lines ...

  s.require_paths = ["lib", "code"]

  # following lines ...
end

现在当david-rb gem的消费者调用require 'david'时,Ruby将首先尝试从david.rb然后从~/gems/david-rb-0.1.0/lib/加载~/gems/david-rb-0.1.0/code/而不会引发错误。

以上是关于'require':无法加载此类文件'gem'(LoadError)的主要内容,如果未能解决你的问题,请参考以下文章

kernel_require.rb:55:in `require': 无法加载此类文件错误

ruby sidekiq`requiret':无法加载这样的文件--pg(LoadError)

Ruby loaderror 无法加载此类文件

node中的require是如何加载模块的

MiniMagick - 无法加载此类文件

Ruby on Rails:“无法加载此类文件”事件机器