'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 --version
给ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin17]
在我的宝石文件中,我有gem: 'vpn'
gem list
确实返回vpn (0.2.1)
任何帮助将不胜感激。提前致谢。
我尝试过的:
- 重新安装gem
- 手动将宝石移动到该位置
- Sudo gem安装
- Many: `require': cannot load such file -- "gem_name" (LoadError) after upgrade of ruby/rails
- Rails: LoadError - Cannot load such file (requiring a gem)(我没有服务器)
- gem which cannot find gem despite it being installed
- railties (LoadError) Cannot load such file
- How to check if a gem is installed?
P.S我没有rake文件。我没有设置一个因为我不太确定它会解决我的问题而且我在找到如何创建问题时遇到了问题。
这里的问题似乎与vpn
宝石的结构方式有关。现代宝石有一种模式:
- 可执行文件放在gem中的
bin
/exe
目录中 - Ruby代码放在gem中
<gem-name>.rb
目录下的lib
file中
因此,当用户调用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': 无法加载此类文件错误