Mam rozszerzenie Buildr, które pakuję jako klejnot. Mam kolekcję skryptów, które chcę dodać do pakietu. Obecnie mam te skrypty przechowywane jako duży blok tekstowy, który piszę do pliku. Wolałbym mieć pojedyncze pliki, które mogę albo skopiować bezpośrednio, albo odczytać/zapisać z powrotem. Chciałbym, żeby te pliki zostały zapakowane w klejnot. Nie mam problemu z zapakowaniem ich (po prostu przykleić je do systemu plików przed rake install
), ale nie wiem, jak uzyskać do nich dostęp. Czy jest coś w rodzaju pakietu zasobów Gem?Uzyskiwanie dostępu do plików spakowanych w klejnot Ruby
8
A
Odpowiedz
16
Istnieją dwa sposoby,
1) można załadować zasobów w stosunku do pliku Ruby w swojej gem wykorzystujące __FILE__
:
def path_to_resources
File.join(File.dirname(File.expand_path(__FILE__)), '../path/to/resources')
end
2) Można dodawać dowolne ścieżki z Gem do $LOAD_PATH
zmienna, a następnie chodzić $LOAD_PATH
znaleźć środki, np
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 = '[email protected]'
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
a następnie
$LOAD_PATH.each { |dir| ... look for resources relative to dir ... }
Pierwszy działał jak czar. :) – Drew
Proszę użyć Gem.data_dir do znalezienia właściwej ścieżki. – ch2500