Книга: Программирование на языке Ruby
19.7.4. Сервер Mongrel
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
позволяет задать имя сценария, написанного с использованием этого API, который представляет собой небольшой язык предметной области (DSL — Domain-Specific Language). В документации приведен пример такого сценария (который добавляет обработчик для каталога, отличного от текущего):
# Файл: 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.7. Ruby и Web-сервер
- 19.7.3. Сервер WEBrick
- Запуск InterBase-сервера
- Расширенная установка InterBase-сервера
- Совместимость клиентов и серверов различных версий
- Статистика InterBase-сервера
- Сервер для InterBase
- 1.3.3. Достоинства и недостатки анонимных прокси-серверов
- Минимальный состав сервера InterBase SuperServer
- Отличительные особенности сервера Yaffil
- Встраиваемый сервер
- Использование сервера Yaffil внутри процесса