Полезные задачи для Capistrano (работаем с конфигами nginx сервера)
-
21 октября 2008 18:28
-
Комментарии
![[ Нет описания ] [ Нет описания ]](/attachment/file/38/Picture.jpg)
В предыдущем посте я рассказал про то, как запускать, останавливать и перезапускать nginx используя Capistrano. Попробуем сделать с nginx-сервером что-нибудь посложнее.
Не знаю как вам, но мне больше всего нравиться редактировать какие-либо файлы (в особенности конфигурационные) на локальной машине, а не в маленьком окне терминала с открытым в нём vi :) Вот для этих целей я и написал пару задач которые позволяют решить эту небольшую проблему.
Как я сказал выше задач - две. Первая скачивает конфигурационный файл с сервера во временную директорию где я его смогу изменить. А вторая закачивает его на сервер (при этом проверяя нет ли в нём ошибок и делая резервную копию предыдущего конфигурационного файла)
namespace :nginx do
set :nginx_pid, "/usr/local/etc/nginx/logs/nginx.pid"
set :nginx_cfg, "/usr/local/etc/nginx/nginx.conf"
set :keep_backups, 10
set :backup_dir, File.join(File.dirname("#{nginx_cfg}"), "backup")
desc "Get nginx.conf from server"
task :get_config do
# Загружаем конфигурационный файл в tmp директорию вашего проекта
download "#{nginx_cfg}", "tmp/nginx.conf"
end
desc "Upload nginx.conf to server"
task :set_config do
# Загружаем конфигурационный файл на сервер
upload "tmp/nginx.conf", "/tmp/nginx.conf"
# Прежде чем подменить конфигурационный файл проверяем что файл не содержит ошибок
# Если на этом этапе будут найдены ошибки, то обработка задачи прекратиться в этом месте
sudo "nginx -t -c /tmp/nginx.conf 2>&1"
# Создаём директорию для хранения бекапов
run "([ ! -d #{backup_dir} ] && sudo mkdir #{backup_dir}) || true"
# Делаем бекап и очищаем директорию с бекапами от старых файлов
backup_file_name = Time.now.strftime("nginx_%Y-%m-%d-%H-%M-%S.conf")
sudo "cp #{nginx_cfg} #{backup_dir}/#{backup_file_name}"
cleanup_nginx_backups
# Подменяем конфигурационный файл
sudo "cp /tmp/nginx.conf #{nginx_cfg}"
# Заставляем nginx перечитать конфигурационный файл
sudo "kill -s HUP #{get_nginx_pid}"
end
def cleanup_nginx_backups
# Формируем массив из файлов которых находятся в директории backup
backup_files = capture("ls -x #{backup_dir}").split.sort
# Формируем список файлов на удаление
files_for_remove = (backup_files - backup_files.last(keep_backups)).map { |file|
File.join(backup_dir, file) }.join(" ")
# Удаляем устаревшие файлы
sudo "rm -rf #{files_for_remove}"
end
def get_nginx_pid
capture "if [ -f #{nginx_pid} ] ; then cat #{nginx_pid}; fi"
end
end
Как видите некоторые параметры и методы взяты из предыдущей стати (т.е. параметры :nginx_pid, :nginx_cfg и метод get_nginx_pid). Но так же я добавил и пару новых: параметр :keep_backups указывает сколько последних конфигурационных файлов должно оставаться в директории backup, а метод cleanup_nginx_backups занимается непосредственно очисткой этой директории.
Как видите ничего особо сложного в этих задачах нет, и при необходимости они могут быть легко настроены на работу с используемыми вами конфигурационными файлами.
в формате RSS. Присоединяйся!
Добавить новый комментарий
Вы можете использовать следующие BBCode теги в комментариях:
| BBCode тег | Результат |
|---|---|
| [b]Жирный текст[/b] | Жирный текст |
| [i]Курсив[/i] | Курсив |
| [u]Подчёркнутый текст[/u] | Подчёркнутый текст |
| [url]http://example.com[/url] | http://example.com |
| [url=http://example.com]Example[/url] | Example |
|
[code]for message in @messages puts message.name end[/code] |
|
|
[quote] IE6 must die! [/quote] |
IE6 must die! |

