Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
# Создать объект Proc и смонтировать его...
some_proc = Proc.new do |req, resp|
resp.body = ' Это то, что выводит мой Proc.'
end
server.mount_proc('/there', some_proc)
# Другой способ смонтировать Proc...
my_handler = HTTPServlet::ProcHandler.new(some_proc))
server.mount('/another', my_handler)
WEBrick располагает и многими другими возможностями, например точками подключения для выполнения дополнительных задач (скажем, запуска какой-нибудь программы при старте). Имеются также развитые средства протоколирования, аутентификации по протоколу HTTP и т.д. Дополнительную информацию ищите в онлайновой документации на сайте http://ruby-doc.org или где-либо еще.
19.7.4. Сервер Mongrel
Автором Mongrel является Зед Шоу (Zed Shaw) при участии других. Основная цель этого сервера — повысить производительность по сравнению с WEBrick. В данном отношении он добился значительных успехов и работает во много раз быстрее (хотя провести точные измерения сложно: результат зависит от многих факторов).
Mongrel часто используют в сочетании с Rails, а документация местами ориентирована на Rails. Но жесткой привязки к Rails нет — сервер может работать и в других контекстах.
Mongrel — скорее, приложение, тогда как WEBrick больше напоминает библиотеку. Во многом они схожи, но порядок запуска и API различаются.
Во многих случаях Mongrel можно запустить как приложение без написания какого-либо кода. Он понимает три основные команды:
start
stop
restart
start
--port portnum
--log filename
--daemonize
mongrel_rails start -h
Запуск в стандартном режиме — это хорошо, но рано или поздно возникнет нужда в чем-то необычном. На этот случай предусмотрены конфигурационные файлы.
Простой способ подготовить конфигурационный файл для Mongrel — воспользоваться флагом
-G
mongrel_rails start -G myconfig.yml -p 3000 -r /home/hal/docs -l my.log
Заданные параметры будут сохранены (в формате YAML) в файле
myconfig.yml
-G
Для чтения параметров из конфигурационного файла задайте флаг
-C
mongrel_rails start -С myconfig.yml
Не употребляйте флаг
-C
Mongrel предлагает API для тонкой настройки поведения сервера. Флаг
-S
# Файл: config/mongrel.conf
uri "/newstuff", :handler => DirHandler.new("/var/www/newstuff")
# Вызывается такой командой:
# mongrel_rails start -S config/mongrel.conf
Mongrel можно использовать и так же, как WEBrick. Следующая интуитивно понятная программа прекрасно работает:
require 'mongrel'
class TinyHandler < Mongrel::HttpHandler
def process(request, response)
response.start(200) do |head,out|
head["Content-Type"] = "text/html"
out.write <<-EOF
Это всего лишь тест...
EOF
end
end
end
server = Mongrel::HttpServer.new("0.0.0.0", "3000")
server.register("/stuff", TinyHandler.new)
server.register("/other", Mongrel::DirHandler.new("./other"))
server.run.join # Ждать в потоке сервера
Если вы активно работаете с Mongrel, то вас может заинтересовать система GemPlugin. Это, по сути, автозагружаемые gem-пакеты, которые становятся «частью» Mongrel. Например, модуль «Mongrel cluster» позволяет легко управлять кластером серверов Mongrel.
О Mongrel можно рассказывать еще долго. Дополнительная информация о протоколировании, отладке, деталях системы подключения модулей и пр. содержится в онлайновой документации на сайте http://mongrel.rubyforge.org.
19.8. Заключение
В этой главе мы рассмотрели низкоуровневые детали программирования CGI-приложений для Web. Мы видели, как в этом помогают такие инструменты, как модуль mod-ruby. Существует еще немало инструментов, помимо упомянутых в этой книге, например ruby-web, Amrita, Tofu и Cerise. Как обычно, перед тем как сделать выбор, поищите альтернативы.
Мы также познакомились с высокоуровневыми библиотеками и каркасами: Rails, Nitro, IOWA и Wee. Было уделено внимание и автономному серверу WEBrick (и гораздо более быстрому Mongrel).
Теперь обратимся к иному, значительно более простому и абстрактному способу сетевого программирования. Следующая глава посвящена распределенной обработке с применением Ruby.
Глава 20. Распределенный Ruby
Меньше — это больше.
В настоящее время имеется немало технологий, поддерживающих распределенную обработку: различные варианты RPC, а также COM, CORBA, DCE и Java RMI.
Одни проще, другие сложнее, но в принципе все делают одно и то же - предоставляют относительно прозрачный способ связи между находящимися в сети объектами так, чтобы с удаленными объектами можно было работать, как с локальными.
Зачем это вообще может понадобиться? Причин много. Например, чтобы распределить некоторую вычислительную задачу между многими процессорами. Примером может послужить программа [email protected], которая использует ваш ПК для обработки небольших объемов данных в поисках внеземного разума (кстати, эта программа не является проектом института SETI). Другой пример — привлечение широких масс к взлому шифра RSA129 (эта попытка увенчалась успехом несколько лет назад). Существует очень много задач, которые можно разбить на небольшие части, пригодные для распределенного решения.