Много изменилось с выпуском Bundler? Есть ли шаблон, который можно использовать в качестве базы? Каковы наилучшие методы?
Каков современный способ структурирования рубинового драгоценного камня?
Ответ 1
Некоторые сообщения, которые я нашел полезными:
- http://chneukirchen.github.com/rps/
- http://tomayko.com/writings/require-rubygems-antipattern
- http://yehudakatz.com/2009/07/24/rubygems-good-practice/
- http://weblog.rubyonrails.org/2009/9/1/gem-packaging-best-practices
Изменить (2012-01-10): превосходный всесторонний справочник по лучшим практикам: Руководство по RubyGems. Я настоятельно рекомендую начать здесь.
Подводя итог ключевым моментам:
- Используйте базовую структуру
lib/gem.rb
иlib/gem/
для кода. - Поместите любые исполняемые файлы в
bin
, любые файлы данных вdata
и тесты вtest
илиspec
. - Не
require
или зависит от файлов, находящихся за пределами пути загрузки. (VERSION
файлы часто, кажется, живут в нечетных местах в драгоценных камнях.) - Не
require 'rubygems'
. - Не вмешивайтесь в
$LOAD_PATH
. - Если вы написали
require File.join(__FILE__, 'foo', 'bar')
, вы делаете это неправильно.
Ответ 2
Самый простой способ использовать bundler:
bundle gem <gem_name>
Вы даже можете использовать его в существующем проекте из родительского каталога.
Ответ 3
При написании жирных (двоичных) драгоценных камней структура обычно такова:
lib/1.8/binary.so
lib/1.9/binary.so
lib/my_gem.rb
(этот файл просто выбирает загрузку binary.so
в зависимости от версии ruby)
И для собственных расширений:
lib/ext/my_gem/my_sources.*
lib/my_gem.rb
Я также обычно помещаю файл version.rb
здесь:
lib/my_gem/version.rb
и он просто содержит что-то вроде:
module MyGem
VERSION = "0.1.0"
end
Кроме того, IMO, не помещайте файлы .rb кроме файла, который вы хотите использовать для загрузки драгоценного камня, в каталог lib/
. Вместо этого поместите все вспомогательные файлы в lib/my_gem/
Ответ 4
Совет Telemachus хорош. Если вы последуете за ним, ваш драгоценный камень будет настроен так, чтобы хорошо играть с поставщиком.
Вы также можете попробовать использовать ювелир. Это драгоценный камень, который генерирует скелеты для драгоценных камней. Скелет по умолчанию, который он выплевывает, соответствует всем соглашениям Telemachus, упомянутым, и он также будет делать некоторые приятные вещи, например, добавить вашу любимую тестовую среду или создать репозиторий GitHub.
Ответ 5
Этот руководство rubygems содержит информацию о структуре драгоценного камня, а затем подробно рассказывает о том, что должно быть включено в ваш gemspec
Вам может быть проще использовать bundler, чтобы создать структуру папок для драгоценного камня:
bundle gem <gem_name>
my_gem$ bundle gem my_gem
create my_gem/Gemfile
create my_gem/Rakefile
create my_gem/LICENSE.txt
create my_gem/README.md
create my_gem/.gitignore
create my_gem/my_gem.gemspec
create my_gem/lib/my_gem.rb
create my_gem/lib/my_gem/version.rb
Initializing git repo in /Users/keith/projects/my_gem/my_gem