'require': не может загрузить такой файл 'gem' (LoadError) - PullRequest
0 голосов
/ 15 сентября 2018

Я понимаю, что есть множество вопросов, идентичных этому, однако мне не удалось исправить мою проблему.Я пытаюсь использовать гем 'vpn', и для целей обучения я решил открыть новый проект.Следуя инструкциям по установке: https://github.com/ronen/vpn (гем также на rubygems.org) и требуя гем в моем коде, я получаю 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 У меня нет файла граблей.Я не настроил его, потому что не совсем уверен, что это решит мою проблему, и у меня были проблемы с поиском, как его создать.

1 Ответ

0 голосов
/ 15 сентября 2018

Проблема здесь, похоже, в том, как структурирован самоцвет vpn.Современные самоцветы имеют шаблон:

  • исполняемые файлы помещаются в каталоги bin / exe в геме
  • Код Ruby помещается в файл <gem-name>.rb внутри lib каталог в геме

Итак, когда пользователь вызывает 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/ без возникновения ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...