Полезные задачи для Capistrano (управляем nginx сервером)

Вкл. / Выкл.

Конечно каждый из вас слышал о потрясающем веб-сервере под названием nginx, который создал наш Российский разработчик Игорь Сысоев. К достоинствам nginx-сервера можно отнести: высокую скорость работы, надёжность, удобство настройки и огромное количество разнообразных плагинов.

В Capistrano есть стандартные задачи которые позволяют управлять кластером из Mongrel-серверов на которых работает ваше Ruby on Rails приложение, а вот для управления nginx-сервером задач пока нет, поэтому я попробую восполнить этот пробел.

Для этого я написал следующие задачи:

namespace :nginx do
  set :nginx_cfg, "/usr/local/etc/nginx/nginx.conf"
  set :nginx_pid, "/usr/local/etc/nginx/logs/nginx.pid"

  desc "Start nginx-server"
  task :start do
    sudo "nginx -c #{nginx_cfg}"
  end

  desc "Stop nginx-server"
  task :stop do
    pid = get_nginx_pid
    sudo "kill -s QUIT #{pid}"
  end

  desc "Re-start nginx-server"
  task :restart do
    stop
    start
  end

  def get_nginx_pid
    capture "if [ -f #{nginx_pid} ] ; then cat #{nginx_pid}; fi"
  end
end

Как видите ничего сложного в них нет. Чтобы запустить nginx нужно всего лишь вызвать его с параметром -c в котором указать путь к конфигурационному файлу. А чтобы остановить нужно получить pid master-процесса (один из способов это достать его из pid-файла который создаёт nginx при запуске), а затем передать этот pid команде kill которая пошлёт сигнал QUIT nginx-серверу, а он в свою очередь плавно завершит все рабочие процессы и закроется.

Чтобы эти задачи заработали надо не забыть указать правильные пути к конфигурационному файлу и к pid-файлу.

Небольшое замечание по поводу команды capture из Capistrano. Она очень похожа на команду stream которую я использовал в предыдущей статье, за исключением того что она не выводит на локальный терминал содержимое stdout-потока захваченного на сервере, а просто возвращает его в виде строки.

Тэги: capistrano nginx
Будь всегда в курсе последних новостей блога подписавшись на новости
в формате RSS. Присоединяйся!
* * *

Комментарии

* * *

Добавить новый комментарий

Доступные BB теги

*

* (не будет опубликован)

(если есть)

  • Multi CAPTCHA Refresh2
  • *

1. Проверьте комментарий перед отправкой
2. Все комментарии проходят модерацию перед публикацией в блоге