KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программирование » Хэл Фултон - Программирование на языке Ruby

Хэл Фултон - Программирование на языке Ruby

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Хэл Фултон, "Программирование на языке Ruby" бесплатно, без регистрации.
Перейти на страницу:

Раз уж вы продолжили чтение, то, наверное, хотите знать, как работает механизм обнаружения сервисов. Такую возможность предоставляет библиотека Rinda::Ring (естественно, основанная на системе Rinda). В чем-то она похожа на службу DNS; это центральная служба регистрации, где хранится информация (в виде пространства кортежей) о drb-процессах. Сервисы drb могут по протоколу UDP найти ближайший сервер регистрации, объявить о своем присутствии или найти другие работающие поблизости сервисы.

Класс Rinda::RingServer реализует сервер регистрации. Он управляет пространством имен, в котором хранится информация о местонахождении других drb-сервисов. RingServer прослушивает сеть в ожидании широковещательных UDP-пакетов с запросами о местонахождении сервера. В ответ на такой запрос он устанавливает соединение (посредством drb) с отправившим его сервисом. Пример:

require 'rinda/ring'

require 'rinda/tuplespace'


DRb.start_service

Rinda::RingServer.new(Rinda::TupleSpace.new)


DRb.thread.join

Класс Rinda::RingProvider регистрирует сервис, объявляя о его присутствии серверу RingServer. При этом сообщается о типе сервиса и о фронтальном объекте, предоставляющем этот сервис, а также передается описательная информация. В следующем примере мы создаем простой сервис Adder, который складывает два числа, а потом объявляем о нем всему миру:

require 'rinda/ring'


class Adder

 include DRbUndumped

 def add(val1, val2)

  return val1 + val2

 end

end


adder = Adder.new

DRb.start_service(nil, adder)

Rinda::RingProvider.new(:adder, adder, 'Simple Adder')


DRb.thread.join

Класс Rinda::RingFinger (названный так по аналогии с имеющейся в UNIX командой finger) применяется для обнаружения сервера RingServer. Он посылает широковещательный UDP-пакет и ждет ответа от сервера. Затем RingFinger можно использовать для поиска объявленных сервисов в пространстве кортежей.

require 'rinda/ring'


DRb.start_service

rs = Rinda::RingFinger.primary

list = [rs] + Rinda::Ringfinger.to_a

svc = list.find_all [:name, :adder, nil, nil]

20.5. Заключение

Эта глава содержит введение в распределенный Ruby. Мы познакомились с тем, как сервис запускается и взаимодействует с клиентами, а также рассмотрели вопросы безопасности.

Мы выяснили, что система Rinda может выступать в роли простого распределенного хранилища объектов, обеспечивающего синхронизацию доступа. Наконец, было показано, как можно использовать библиотеку Rinda::Ring для обнаружения drb-сервисов.

На этом рассмотрение распределенного Ruby заканчивается. Переходим к следующей теме — инструментам разработки на языке Ruby, в частности программе Rake, оболочке irb, интегрированным средам разработки (IDE) и др.

Глава 21. Инструменты разработки для Ruby

Человек — это животное, создающее инструменты.

Бенджамин Франклин

Среда разработки включает не только интерпретатор. У каждого хорошего разработчика под рукой всегда есть целый набор средств, облегчающих жизнь. Некоторые из них зависят от языка, другие — нет.

Самый важный инструмент — редактор. Основная работа программиста — манипулирование текстом, поэтому выбор редактора (и ваше умение им пользоваться) оказывает огромное влияние на производительность труда. Немаловажно также наличие в нем поддержки конкретного языка или средств настройки. Мы дадим очень краткий обзор распространенных редакторов.

Другие инструменты помогают в составлении документации, установке библиотек, отладке и т.д. Мы уже познакомились с библиотекой отладки (не являющейся автономным приложением) в главе 16, а в главе 17 рассказали о системе RDoc. Поэтому здесь мы их касаться не будем. Также в главе 17 шла речь о системе RubyGems с точки зрения разработчика, создающего пакет; теперь же мы станем на место программиста, который пользуется пакетами, созданными другими людьми.

Также в этой главе мы рассмотрим программы irb (интерактивный Ruby) и ri (инструмент для чтения документации). И завершим ее кратким обсуждением интегрированных сред разработки (IDE), которые хорошо работают с Ruby.

21.1. Система RubyGems

RubyGems — это не «официальная» система управления пакетами для Ruby, но одна из тех, что пользуются обширной поддержкой со стороны сообщества. В июле 2006 года она еще не входила в стандартный дистрибутив, но может стать его частью в будущем. Мы довольно подробно рассматривали процедуру создания gem- пакета в главе 17. А в этой главе расскажем, как пользоваться пакетами, созданными другими людьми.

RubyGems пытается решить несколько основных проблем, как то: простота установки, центральный репозиторий, управление версиями библиотек, управление зависимостями и т.д. Gem-пакеты предоставляют доступ к документации и позволяют легко контролировать, какие библиотеки установлены.

Если система RubyGems на вашем компьютере не установлена, зайдите на страницу http://rubyforge.org/projects/rubygems и выполните простые инструкции по загрузке и установке. В дальнейшем RubyGems будет обновляться автоматически.

Сам исполняемый файл называется gem. Структура команд похожа на применяемую в cvs и других аналогичных системах, то есть у каждой команды есть подкоманды, а у каждой подкоманды — специфичные для нее параметры. Ниже приведена информация о порядке запуска[18]:

RubyGems - развитый менеджер пакетов для Ruby. Ниже приведена

краткая справка с указанием на источники дополнительной информации.


 Порядок запуска:

  gem -h/--help

  gem -v/--version

  gem command [аргументы...] [флаги...]


 Примеры:

  gem install rake

  gem list —local

  gem build package.gemspec

  gem help install


 Более подробные справки:

  gem help commands  показать все команды 'gem'

  gem help examples  показать примеры использования

  gem help COMMAND   вывести справку о команде COMMAND

  (например, 'gem help install')


 Дополнительная информация:

  http://rubygems.ruby forge.org

Самые важные команды не вызывают затруднений. Например, чтобы установить библиотеку feedtools, нужно выполнить команду:

gem install feedtools

Сначала она будет искать gem-пакет локально, а если не найдет, то обратится к серверу Ruby Forge. По умолчанию устанавливается последняя версия (хотя в некоторых случаях вам задают вопрос, какой именно пакет вы хотите установить). Можно и явно указать версию с помощью флага -v или --version. Есть еще несколько флагов, управляющих установкой; подробную информацию дает команда gem help install.

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

Как узнать имя нужного вам пакета? Если он находится на сайте RubyForge, то обычно называется так же, как проект. Например, программа rake находится на странице http://rubyforge.org/projects/rake или просто http://rake.rubyforge.org. поэтому для установки нужно выполнить команду gem install rake.

Если вы не располагаете даже такой информацией, попробуйте воспользоваться командой gem search. Если указать часть предполагаемого имени gem-пакета, то будут найдены все пакеты с похожими именами. По умолчанию поиск производится на локальном компьютере; чтобы искать в центральном репозитории, задайте флаг --remote. Например, команда gem search xml --remote нашла 12 пакетов.

Чтобы получить информацию об установленном пакете, введите команду gem specification — она напечатает все содержащиеся в пакете метаданные (в основном содержимое самого файла gemspec). Флаг --remote существует, но пока не реализован.

Кроме того, имеется команда деинсталляции uninstall, а также команды query и list, отчасти перекрывающие друг друга и команду search. Есть и еще много команд (дополнительную информацию вы найдете во встроенной справке или в онлайновой документации).

Полезно установить gem-сервер и на своей системе — не в качестве репозитория, из которого другие смогут дистанционно устанавливать пакеты, а как централизованный механизм, позволяющий просматривать в браузере все локально установленные пакеты вместе с документацией.

Для запуска gem-сервера просто наберите команду gem_server (обычно сервер работает в фоновом режиме). Указав в адресной строке браузера URL localhost:8808, вы увидите страницу «RubyGems Documentation Index», где в алфавитном порядке перечислены все установленные gem-пакеты со ссылками на документацию в формате rdoc и на домашнюю страницу проекта в Web.

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*