Упаковка файла данных только для чтения с гемом Ruby - PullRequest
8 голосов
/ 25 мая 2011

Я работаю над приложением Ruby, которое развернуто как гем.Я хотел бы включить файл данных только для чтения с гемом, и я не уверен, как / где это должно быть упаковано

Для небольшого фона, это приложение имеет дело со спецификацией MIDI, которая включает в себя сотни постоянных значений,Например, контроллер «Channel Volume» всегда идентифицируется значением 7. «Sustain» идентифицируется 64. и т. Д. И т. Д. В прошлом люди включали эти значения в большой набор констант в свой код.Это нормально, но мне кажется более уместным включать их в не зависящем от языка формате, таком как yaml

. Использование GEM_PATH для определения местоположения файла yaml ужасно и также не будет работать при использовании библиотеки в неРазвертывание гемов.

Спасибо за помощь

Ответы [ 4 ]

11 голосов
/ 26 мая 2011

Я не думаю, что RubyGems делает какие-либо утверждения о том, где вы должны хранить такие файлы. Я бы поставил его под lib/ и сделал бы так, как говорит @mkrmr. Я бы использовал File.expand_path, потому что он меньше печатает и исправляет некоторые случайные проблемы с символическими ссылками и перемещением файлов: YAML.load_file(File.expand_path('../../midi_codes.yml', __FILE__))

7 голосов
/ 25 мая 2011

Если вы поместите этот файл где-нибудь в дереве исходного кода вашего Gem, вы можете использовать относительный путь для его загрузки.Оттуда, где вы хотите прочитать, вы можете определить путь следующим образом: File.dirname(__FILE__) + "/here/is/my/file.txt"

Вы можете использовать модификатор пути .. как вы бы на оболочке, чтобы подняться в каталог.

6 голосов
/ 14 октября 2014

Для указанных файлов существует указанное местоположение.

  1. Создайте папку с именем <gemdir>/data в вашем геме
  2. Используйте метод Gem.datadir, чтобы найти этот каталог.

Создается каталог, который, как ожидается, будет общедоступным.

Если вы хотите, чтобы этот файл был закрытым, то с помощью трюка File.dirname(__FILE__) + "/path" это будет сделано.

0 голосов
/ 28 марта 2017

Менеджер пакетов Rubygems хранит свои статические файлы в каталоге lib.Например, сертификаты (*.pem) хранятся в lib/rubygems/ssl_certs.Я считаю, что их можно считать наиболее авторитетным источником, поэтому я рекомендую вам сделать то же самое.

...