繁体   English   中英

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

[英]'require': cannot load such file '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 --version给出ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin17]

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

gem list确实返回vpn (0.2.1)

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

我尝试过的

PS我没有rake文件。 我没有设置一个,因为我不太完全确定它是否可以解决我的问题,而且我在寻找如何创建一个问题上遇到了问题。

这里的问题似乎与vpn gem的结构方式有关。 现代宝石具有以下特征:

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

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

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

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

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

  # following lines ...
end

现在,当一个消费者david-rb宝石通话require 'david' ,红宝石将首先尝试加载david.rb~/gems/david-rb-0.1.0/lib/ ,然后从~/gems/david-rb-0.1.0/code/而不会引发错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM