Меня за….ло скролить длинные админки туда-сюда ради сабмита и вот
-
.submit-row{
-
position: fixed;
-
z-index: 100;
-
left: 220px;
-
top: 0;
-
}

И панель наконецто просто начинает за вами кататься

А чем ты занимаешься в свой выходной?
Programming by Python, JavaScript, ActionScript, PostgreSQL, MySQL for Game Creation and Web Develop. Also about Open Source, Debian and Project Management.
Меня за….ло скролить длинные админки туда-сюда ради сабмита и вот

И панель наконецто просто начинает за вами кататься

А чем ты занимаешься в свой выходной?

Чем меньше рутины мы привносим в свою работу, тем больше она может приносить удовольствия.
Сегодня я расскажу про автоматизированный деплойтинг в python. Это значит одной командой я могу залить на все продакшен сервера файлы, обновить на нем необходимые компоненты и перегрузить веб сервер, и наблюдать за этим откинувшись на кресле и попивать кофеек.
Я Вам расскажу про Fabric(На момент написания статьи 0.9.1 — бала последняя стабильная версия), наиболее подходящий для этого инструмент, который делает все описанное и даже больше через ssh.
Про установку рассказывать особо нечего, pip отлично справляется с этим.
В корень своего проекта я кладу fabfile.py, в этом файле и будут храниться все процедуры для работы с Fabric. Ниже приведу небольшой пример скрипта, который будет архивировать наш проект, заливать его на сервер и там разархивировать.
Если у Вас все получилось, а я очень надеюсь, что с этим хостом и именем пользователя ни у кого кроме меня получиться ничего не может (так что поменяйте свою строку конекта во второй строке), то вы можете увидеть что-то сильно напоминающее вот это:
Само собой, пароль у вас спросят и его необходимо будет ввести, в конце статьи я выложу свой пароль к ссш, чтоб вы могли протестить работу.
Кому лень вводить пароли могу добавить после второй сроки
env.password = ‘oh_its_my_real_password’
либо сгенерить себе файл с ссш ключом и путь к нему положить в
env.key_filename — в отличие и пароля тут может быть передан массив ключей
Но и этот код можно сократить. У Fabric есть contrib libs, одна из них project. Тут подробно каждую я описывать не буду, просто покажу пример с одной из них, дабы просто показать, что они есть
как видите наш код сократился до одной команды, не считая команду для тестирования Django проекта, ведь если какая-то команда возвратит ошибочный статус, то выполнения прекратится, а значит если тесты не проходят загрузка не начинается. Дополнительный параметр capture говорит о том, что необходимо скрывать выходные данные команды, мы эту опцию отключаем.
Вот основные команды, которые Вам необходимо знать, чтоб свободно пользоваться Fabric
put — копировать файл с локальной машины на удаленную. Доп параметр mode — устанавливает права на файл, см chmod
get — копировать файл с удаленной на локальную
local — выполнить команду на локальной машине. Доп параметр capture — скрывать выходные данные, по умолчанию False
run — выполнить команду на удаленной машине
sudo — выполнить команду на удаленной машине через судо. Доп параметр user — указываем имя пользователя, под которым необходимо запустить команду
Обратите внимание, что у нас есть команда sudo, а значит при необходимости, мы можем и сервак зарелоадить и вообще сделать любые админ вещи, главное, чтоб пользователь был в судоерсах.
Для деплойтинга на несколько серверов, причем различной конфигурации, и роли – у Fabric тоже кое-что припасено.
в этом примере заливка файлов будет идти сразу на 2 вебовых сервака. Как видите вы можете запланировать у себя роли отдельных серверов под БД, под медиа файл и т.д.
кроме как декоратаром роль можно указывать и при запуске процедуры
Иногда в момент или во время запуска необходимо передать данные скрипту.
В момент запуска это делается через аргументы самой функции
к примеру если у вас
то эти 2 аргумента можно передать как
Либо спросить что-то во время работы функции у пользователя функцией
prompt(text, key=None, default=”, validate=None)
Задает вопрос пользователю с текстом text, если пользователь не вводит данные, то возвращает значение из default, предварительно отчищая его функцией validate, и возвращает как результат этой функции, если не передан key, иначе кладет значение в env[key]
А теперь примеры функций деплойтинга из реальной жизни, которые вы можете написать и у себя в проекте:
bounce_wsgi_procs — зарелоадить wsgi через touch в него
deploy_media — загружаем только медиа файлы
migrate — запускаем скрипт миграции через South
update_repositories – обновляем репозитарии
update_dependencies — устанавливаем зависимости
reload_nginx — перегружаем nginx
deploy — полная установка, последовательный запуск всех этих функций.
Подводя итоги могу сказать, что Fabric должна стать musthave tool в разработке.
Надеюсь, все из вас понимают, что на python manage.py runserver … продакшен работать не будет. Это хорошо. На самом деле ответы на все эти вопросы можно накапать в гугле.
Создавая проект на, к примеру, на перле у меня был fcgi скрипт, в котором и обрабатывались все запросы. Этот скрипт писался мной либо Catalyst сам генерил этот файл. На внешнем сервере я просто лайти указывал путь на этот файл и все. Удобно это было хотя бы тем, что лайти сам следил за тем, чтоб скрипт не отваливался и в случае необходимости доподнимал необходимое количество скриптов.
В случае джанго – вы отдельно поднимаете скрипты, указываете им сокет а лайти уже указываете на этот сокет. По крайне мере второго решения я не нашел пока, т.к. и это пока устраивает.
Что тут происходит? Сначало направляем фаст “/manage.fcgi” на сокет “/home/www/website/manage.sock”.
В алиасах прописываем пути к вашим папкам со статикой.
Реврайты лайти проверяет поочереди. Поэтому сначала записываются статика с favicon. А потом реврайт на fastcgi. Т.е. на фаст попадают только не статические запросы.
По модулям lighttpd – проверте, чтоб у вас были активны следующие: mod_alias, mod_rewrite и mod_fastcgi
Далее скрипт, который создает непосредственно сокет. Его можно положить в папку с manage.py
В принципе и скрипт и конфиг лайти, с небольшими поправками, можно нарыть в доках по джанго.
Но этого будет мало.
Во первых необходимо сразу указать в settings.py:
иначе вас ждут несколько неприятных сюрпризов с редиректами. Далее проконтролируйте урлы и пути в файле settings.py. Хотябы LOGIN_URL у вас точно должен был поменятся.
Далее выключаем дебаг, заполняем данные для отправки почты и емаил администратора. Теперь, в случае какой либо ошибки она не будет выдана пользователю, а полный дамп будет выслан вам на мыло. Ниже я привел конфигурацию, для отсылки почты через жмейловский смтипи.
Пока все… если что еще всплывет, буду еще об этом писать.
Recent Comments