Доступ к файлам, упакованным в Ruby Gem

#ruby #gem #packaging #buildr

#ruby #gem #упаковка #buildr

Вопрос:

У меня есть расширение Buildr, которое я упаковываю как gem. У меня есть коллекция скриптов, которые я хочу добавить в пакет. В настоящее время у меня есть эти скрипты, сохраненные в виде большого текстового блока, который я записываю в файл. Я бы предпочел иметь отдельные файлы, которые я могу либо копировать напрямую, либо читать / записывать обратно. Я бы хотел, чтобы эти файлы были упакованы в gem. У меня нет проблем с их упаковкой (просто вставьте их в файловую систему раньше rake install ), но я не могу понять, как получить к ним доступ. Существует ли тип пакета ресурсов Gem?

Ответ №1:

В основном есть два способа,

1) Вы можете загружать ресурсы относительно файла Ruby в свой gem с помощью __FILE__ :

 def path_to_resources
  File.join(File.dirname(File.expand_path(__FILE__)), '../path/to/resources')
end
  

2) Вы можете добавить произвольные пути из своего Gem в $LOAD_PATH переменную, а затем перейти $LOAD_PATH к поиску ресурсов, например,

 Gem::Specification.new do |spec|
  spec.name = 'the-name-of-your-gem'
  spec.version ='0.0.1'

  # this is important - it specifies which files to include in the gem.
  spec.files  = Dir.glob("lib/**/*")   %w{History.txt Manifest.txt}  
                Dir.glob("path/to/resources/**/*")

  # If you have resources in other directories than 'lib'
  spec.require_paths << 'path/to/resources'

  # optional, but useful to your users
  spec.summary = "A more longwinded description of your gem"
  spec.author = 'Your Name'
  spec.email = 'you@yourdomain.com'
  spec.homepage = 'http://www.yourpage.com'

  # you did document with RDoc, right?
  spec.has_rdoc = true

  # if you have any dependencies on other gems, list them thusly
  spec.add_dependency('hpricot')
  spec.add_dependency('log4r', '>= 1.0.5')
end
  

и затем,

 $LOAD_PATH.each { |dir|  ... look for resources relative to dir ... }
  

Комментарии:

1. Пожалуйста, используйте Gem.data_dir для поиска правильного пути.

2. @ch2500 Можете ли вы привести пример использования Gem.data_dir ?