[英]'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的结构方式有关。 现代宝石具有以下特征:
bin
/ exe
目录中 <gem-name>.rb
的lib
目录内的<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.