Есть ли способ узнать корневой путь моего драгоценного камня? Я пытаюсь загрузить конфигурацию по умолчанию из yaml внутри пути драгоценных камней. Как получить корневой каталог gems с ruby?
Поиск корня жемчуга
Ответ 1
Учитывая следующую структуру проекта:
your_gem/
lib/
your_gem.rb
Вот как бы я это сделал:
# your_gem.rb
module YourGem
def self.root
File.expand_path '../..', __FILE__
end
end
Ruby 2.0 представил метод Kernel#__dir__
; он позволяет значительно сократить решение:
# your_gem.rb
module YourGem
def self.root
File.dirname __dir__
end
end
Если вам нужен доступ к другим каталогам, вы можете просто построить root
:
module YourGem
def self.bin
File.join root, 'bin'
end
def self.lib
File.join root, 'lib'
end
end
Ответ 2
Это универсальное решение для исполняемых файлов и библиотек. Он загружает спецификацию с использованием API Gem, поэтому путь всегда правильный:
spec = Gem::Specification.find_by_name("your_gem_name")
gem_root = spec.gem_dir
yaml_obj = YAML.load(gem_root + "/file_name.yaml")
Ответ 3
gem list <gem> -d
Или, если вы используете bundler:
bundle show <gem>