2014-07-13 3 views
3

Я хочу прочитать .IML-файл, включенный в Rails Engine Gem из моего main_app. Файл находится по адресу config/test.yml.Как читать файлы (.yml) из Gem

IO.read("config/test.yml") терпит неудачу с No such file or directory @ rb_sysopen

Если я переместить файл в главное приложение, все работает отлично. Но мне нужен этот файл в Gem.

ответ

8

Решение 1

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

# lib/my_gem.rb 
GEM_ROOT = File.expand_path("../..", __FILE__) 

# app/.../some_class.rb 
IO.read("#{GEM_ROOT}/config/test.yml") 

Решение 2

Наиболее целесообразно, вы можете получить путь гем программно из , а затем использовать этот корневой путь, чтобы получить полный путь к файлу YML.

Посмотрите на эту answer, что вы можете легко адаптироваться к вашему делу

+0

Я пытаюсь прочитать файл yml gem из main_app, я не пытаюсь прочитать yml-файл gem внутри того же самого драгоценного камня. – antpaw

+0

выглядит так: 'GEM_ROOT' также доступен в основном приложении. этот ответ определенно работает для обеих ситуаций. спасибо – antpaw

+0

Я этого не понял :) Отредактировал свой ответ соответственно – Benj

1

Вы должны быть в состоянии загрузить приложение YAML файлы, делая это в драгоценный камень:

YAML.load_file ('конфигурации /test.yml ')

Смежные вопросы