Нахождение корня драгоценного камня

Есть ли способ узнать корневой путь моего драгоценного камня? Я пытаюсь загрузить конфигурацию по умолчанию из yaml внутри пути gems. Как мне получить корневой каталог gems с помощью ruby?

Ответы на вопрос(3)

Это универсальное решение для исполняемых файлов и библиотек. Он загружает спецификацию, используя Gem API, поэтому путь всегда корректен:

spec = Gem::Specification.find_by_name("your_gem_name")
gem_root = spec.gem_dir
yaml_obj = YAML.load(gem_root + "/file_name.yaml")
 18 сент. 2015 г., 21:11
@MatheusMoreira, почему это важно?
 17 апр. 2014 г., 21:58
использованиеFile.join вместо конкатенации строк.
 27 авг. 2016 г., 16:52
@ JonathanR.Wallace - Согласился, что File.join помогает с совместимостью платформы / приложения, однако API ввода-вывода Windows Windows преобразует любой & quot; / & quot; в & quot; \ & quot; что он находит на пути. Тем не менее, многие приложения Windows, которые проверяют пути, не будут работать в & quot; / & quot; вместо того, чтобы оставить ОС, чтобы решить, что делать. Смотрите примечание:Naming Files, Paths and Namespaces
 18 мая 2016 г., 23:05
File.join гарантирует, что вы используете соответствующий разделитель пути для вашей ОС, что делает код кросс-плататорм. & Quot; / & Quot; специфично для linux Многие версии (все?) Microsoft Windows используют & quot; \ & quot ;.

gem list <gem> -d

Или, если вы используете упаковщик:

bundle show <gem>

 Jason Waldrip13 апр. 2012 г., 01:50
Внутри самого камня: я пытаюсь вызвать File.load. Что такое корень драгоценного камня?
Решение Вопроса

Учитывая следующую структуру проекта:

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
 26 авг. 2015 г., 21:52
File.expand_path('../', File.dirname(__FILE__) это то, что я обычно вижу.
 29 дек. 2014 г., 06:21
Я использую ruby 2.0.0p0 (редакция 2013-02-24 39474).File.dirname __dir__ не работает для меня. Я получаю эту ошибку:TypeError: no implicit conversion of nil into String, Случилось узнать почему? Благодарю.
 29 дек. 2014 г., 06:26
@ E.E.33,__dir__ is documented to return nil if __FILE__ is also nil, Как у вас работает скрипт?
 29 дек. 2014 г., 06:38
Я просто открыл IRB и запустил команду__dir__, Я просто побежал, если из файла, и получил желаемые результаты. Спасибо друг!
 05 мар. 2014 г., 16:56
Работал для меня, чтобы ссылаться на мои & quot; документы & quot; папка, включенная в состав gemspec, где использование Rails.root.join по умолчанию (& quot; docs & quot;) завершается неудачно. Спасибо!

Ваш ответ на вопрос