Книга: Программирование на языке Ruby
17.2.2. Система RubyGems
17.2.2. Система RubyGems
Идея и название системы RubyGems принадлежат Райану Ливенгуду (Ryan Leavengood), но текущая реализация зародилась на ночной вечеринке, состоявшейся после Международной конференции по Ruby 2003 года в Остине, штат Техас. Первый вариант кода написали Чэд Фаулер (Chad Fowler), Джим Вайрих (Jim Weirich), Дэвид Алан Блэк (David Alan Black), Рич Килмер (Rich Kilmer) и Пол Брэннен (Paul Brannan). С тех пор к ним присоединились и другие; особо стоит отметить Эрика Ходеля (Eric Hodel) и Райана Дэвиса (Ryan Davis).
В настоящее время RubyGems, наверное, самая распространенная система создания пакетов, хотя до сих пор не включена в дистрибутив. Я полагаю, что после устранения нескольких мелких огрехов она станет настоящим стандартом для Ruby.
Как и повсюду в этой главе, мы рассматриваем вопрос с точки зрения разработчика. Вы узнаете, как представлять плоды своего труда в виде gem-пакета, но о манипулировании пакетами извне мы говорить не будем. Это тема другого раздела.
Возникает естественный вопрос: «Зачем нужно использовать gem-пакеты?» Вот перечень лишь некоторых их достоинств:
• простота установки и удаления;
• поддержка нескольких версий;
• управление зависимостями;
• механизм запроса и поиска пакетов.
Имя gem-пакета обычно состоит из короткого описательного слова, за которым следует дефис и стандартный номер версии в формате «основной.дополнительный.рабочий», который ныне принят почти повсеместно (конечно, каждая часть номера может состоять из нескольких цифр). Мы настоятельно рекомендуем пользоваться механизмом рациональной нумерации версии; если вы с ним не знакомы, поищите описание в сети.
Для построения gem-пакета нужно начать с создания предопределенного дерева каталогов (примерно такого же, как для setup
). На верхнем уровне неплохо поместить файл README, в который включаются информация об авторе и способе связи с ним, авторские права, лицензионное соглашение, перечень известных ошибок и т.д. Если вы напишете этот файл в формате RDoc
, его можно будет включить и в состав HTML-документации проекта.
Для построения gem-пакета необходимо создать его спецификацию (gemspec). Это один из тех случаев, когда стирается грань между кодом и данными. Спецификация - это просто исполняемый файл на языке Ruby:
гequire 'rubygems'
SPEC = Gem::Specification.new do |s|
s.name = "Drummer"
s.version = "1.0.2"
s.author = "H. Thoreau"
s.email = "[email protected]"
s.homepage = "http://waldenpond.com/Drummer"
s.platform = Gem::Platform::RUBY
s.summary = "A Ruby app for those who march to a different drummer"
s.files = Dir["./*"] + Dir["*/**"]
s.test_file = "test/ts_drum.rb"
s.has_rdoc = true
s.require_path = "lib"
s.extra_rdoc_files = ["README", "ChangeLog"]
s.add_dependency "KirbyBase", ">=2.5.0"
end
Назначение многих атрибутов понятно из названия. Но есть и другие, хотя обычно они не так важны и встречаются реже. Обратитесь к онлайновой документации по RubyGems.
Имея файл спецификации, можно создать gem-пакет двумя способами. Во-первых, можно просто выполнить файл (в конце концов, это ведь обычная программа на Ruby). Тогда в текущем каталоге будет создан пакет с указанным именем. Альтернативно можно воспользоваться командой gem build
, которой передается имя файла спецификации. Результат будет один и тот же.
Созданный gem-пакет можно распространять через Web или любым другим способом. Я настоятельно рекомендую для управления проектом пользоваться сайтом RubyForge. Если загруженный на него архив содержит файл спецификации, то пакет будет создан автоматически. В следующем разделе мы поговорим о сайте RubyForge и архиве приложений Ruby (RAA).
- 21.1. Система RubyGems
- Система безопасности InterBase
- Что делать, если при установке принтера появляется сообщение Невозможно завершение операции. Подсистема печати недоступн...
- 7 Система Цикл: долгосрочные цели
- 3. Система конкурентных продаж (продажи по методу КЛИН)
- 3.4 Сетевая файловая система
- 3.7 Система Microsoft Exchange 2000 и NAS
- 6.5 Файловая система NTFS
- 1.3.1. Индексирование сайта в поисковых системах
- 6.6.2.1. Файловая система FAT 16
- 6.6.2. Файловая система FAT
- 4 Файловая система Linux