lest, just lest

Заметки о web-разработке, администрировании Linux и настройке Mac OS X

Thinking Sphinx и runit

1 комментарий

Thinking Sphinx является, пожалуй, наилучшим способом использовать Sphinx в Rails-приложении, но предлагаемый по-умолчанию вариант его запуска (rake thinking_sphinx:start) несколько сомнителен для production окружения. Как раз тут приходит на помощь runit.

Супервизор runit - идеальный способ для запуска и управления своими сервисами. Он реализует такой функционал, как:

  • превращение любого процесса в демон;
  • логирование вывода процесса и ротирование логов;
  • запуск, остановка, рестарт, запрос состояния, управляющие скрипты для init.d;
  • выключение и запуск сервисов автоматически при появлении новых сервисов в списке либо удалении старых из списка;
  • возможность ведения нескольких независимых списков сервисов одновременно (например, для каждого пользователя отдельно и для системы в целом);
  • удобный API для управления сервисами.

Звучит отлично! Но как же запустить через него наш Sphinx?

Для начала необходимо установить runit - apt-get install runit. Для каждого runit сервиса создаем директорию в /etc/sv, для примера назовем сервис rails_app_sphinx:

mkdir /etc/sv/rails_app_sphinx

Также необходимо наличие скрипта run, который осуществляет запуск сервиса. Для запуска Sphinx с конфигурацией, полученной с использованием Thinking Sphinx, подойдет примерно такой скрипт (/etc/sv/rails_app_sphinx/run):

#!/bin/sh
exec 2>&1
exec chpst -u rails:rails \
  /usr/local/bin/searchd \
    --nodetach \
    --pidfile \
    --config /path/to/rails_app/config/production.sphinx.conf

В этом скрипте необходимо заменить:

  • rails:rails - пользователь и группа, под которыми запускается Rails-приложение
  • /usr/local/bin/searchd - полный путь к searchd (одн из исполняемых файлов в составе Sphinx)
  • /path/to/rails_app - путь к директории с Rails-приложением

Делаем скрипт запуска исполняемым:

chmod +x /etc/sv/rails_app_sphinx/run

Все готово, остается только дать возможность runit увидеть новый сервис:

ln -s /etc/sv/rails_app_shinx /etc/service

После создании символической ссылки в директории /etc/service супервизор runit автоматически запустит наш сервис.

Теперь можно проверить статус:

sv status rails_app_sphinx

Остановить его:

sv down rails_app_sphinx

Или запустить снова:

sv up rails_app_sphinx

Для интеграции с capistrano в config/deploy.rb необходимо подключить рецепты Thinking Sphinx и добавить остановку Sphinx после задачи deploy:restart:

require 'thinking_sphinx/deploy/capistrano'
...
after 'deploy:restart', 'thinking_sphinx:stop'

После остановки Sphinx будет заново запущен благодаря работе runit, который осуществляет мониторинг сервисов и осуществляет перезапуск в случае их завершения.

Более подробную информацию непосредственно о runit можно найти в статье на хабре.

Related posts:

  1. Установка Sphinx на Debian Lenny
  2. Cron и Ruby: использование Whenever
  3. Интеграция KWallet и ssh-agent в среде KDE
  4. Использование Sinatra внутри Rails Metal
  5. Настройка ssh клиента

Автор: lest

Декабрь 4, 2010 в 00:23

Опубликовано в linux

Метки: , , , ,

One Response to 'Thinking Sphinx и runit'

Subscribe to comments with RSS or TrackBack to 'Thinking Sphinx и runit'.

  1. о! рад, что эта статья увидела свет =) спасибо

    yas

    4 Дек 10 at 19:00

Leave a Reply