【问题标题】:'require': cannot load such file 'gem' (LoadError)“要求”:无法加载此类文件“宝石”(LoadError)
【发布时间】:2019-02-19 19:15:07
【问题描述】:

我意识到有很多与此相同的问题,但是我没有成功解决我的问题。我正在尝试使用 gem 'vpn' 并且出于学习目的,我想我会打开一个全新的项目。遵循以下安装说明:https://github.com/ronen/vpn(gem 也在 ruby​​gems.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 文件中,我有 gem: 'vpn'

gem list 确实返回 vpn (0.2.1)

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

我尝试过的:

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

【问题讨论】:

    标签: ruby-on-rails ruby rubygems


    【解决方案1】:

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

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

    因此,当用户调用 require <gem-name> 时,Ruby 会尝试加载 <gem-name>-<gem-version>/lib/<gem-name>.rb,如果没有则返回 LoadError
    例如,当用户在其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.rbdavid.rb 文件(来自名为david-rb 版本0.1.0 的假设gem),david-rb.gemspec 应具有以下内容:

    Gem::Specification.new do |s|
      # preceding lines ...
    
      s.require_paths = ["lib", "code"]
    
      # following lines ...
    end
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-30
      • 2015-01-22
      • 2012-10-25
      • 2020-12-05
      • 2017-03-18
      • 2018-07-31
      相关资源
      最近更新 更多