Проблема здесь, похоже, в том, как структурирован самоцвет 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/
без возникновения ошибки.