2012-04-22 2 views
0

Я пытаюсь создать драгоценный камень с Bundler, следуя этому руководству: http://rakeroutes.com/blog/lets-write-a-gem-part-one/. В нем говорится:Создание драгоценного камня с Bundler

я неправильно думал, после того, мой первый взгляд через gemspec , что мне нужно будет добавить еще требуют утверждения, как я разработал свой камень. Это не так: файлы просто должны быть в git.

Я пытаюсь очистить некоторые из моих старых драгоценных камней, чтобы использовать это соглашение, но когда я устанавливаю свой драгоценный камень, классы из других файлов недоступны. У меня есть несколько каталогов, вложенных в каталог my/lib, но я бы не подумал, что это будет проблемой. Есть ли что-то простое, чтобы игнорировать, что бы предотвратить другие мои файлы от необходимости? Любая помощь будет оценена по достоинству.

ответ

1

В ссылке, когда он говорит, что ему не нужно, чтобы добавить много «требуют» заявления, он должен означать добавление файлов к s.files, s.executables и s.test_files массивы - это определить, какие файлы будут упакованы в драгоценный камень и какие файлы проигнорированы. Как вы можете видеть из спецификации gem, все, что отслеживается git в некоторых каталогах, будет включено в упакованный драгоценный камень.

Ruby's require - это совсем другая история. Стандартные правила требуют применения.

Система драгоценных камней Ruby работает, добавляя кучу разных мест для Ruby для поиска «foo.rb» при запуске require "foo". Если "lib" является вашим единственным требованием для вашего драгоценного камня, когда вы require "my_gem" Ruby только запустит код в lib/my_gem.rb. Если lib/my_gem.rb не содержит require любых других файлов в вашем драгоценном камне, тогда Ruby их не видел, и вы получите неопределенные постоянные ошибки при попытке использовать классы из этих файлов.

Для примера вы можете взглянуть на два простых камня, которые я написал; оба начались с bundle gem: HashToHiddenFields и SimpleStats. В обоих драгоценных камнях основной файл Ruby в lib/ требует, чтобы все, что нужно было загрузить, чтобы камень работал правильно. Например, hash_to_hidden_fields.rb требует action_view/helpers/hash_to_hidden_fields, так что существует постоянный + модуль ActionView::Helpers::HashToHiddenFields, поэтому мы можем включить его в ActionView::Base.

Надеюсь, что ответит на вопрос. Я знаю, что Ruby требовал для меня довольно нечеткое время.

+0

Отлично, спасибо Брайан! – shanemcd

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