-
Доброе время суток.
Пришло время выкладывать проект в продакшн, всё осложняется тем, что у меня не будет доступа по сети к системе после инсталляции, а ездить не всегда удобно. Поэтому я сейчас подробно разбираю процесс установки и обновления проекта с помощью стандартных пакетов Debian, к чему меня сподвигла статья http://softwaremaniacs.org/blog/2007/08/15/deb-packages-in-yandex/
С самой сборкой пакетов проблем нет.
Вопрос в том, как правильно раскидать сам код сайта, статику по файловой системе, куда выложить settings.py? -
Руслан, вам насколько срочно это надо? У меня довольно давно лежит драфт поста с подробным описанием того, как мы это делаем, но я всего его откладываю, потому что у нас это всё ещё далеко не в финальном виде...
-
Вчера! :)
Драфт пойдет. Софт готов, оборудование настроено, дело только в пакете.
По результатам готов отписаться с подробностями.
ruslan.popov@gmail.com -
Иван, мне бы тоже это было интересно.
-
Думаю, что это было бы интересно многим. И почему deb, а не fabric? ;)
-
Руслан, драфта, к сожалению, в электронном виде нет, он в разрозненном состоянии в голове :-). Так что вчера не успею :-).
Но если совсем коротко:
- мы используем CDBS
- все приложения проекта ставятся с помощью python-support или python-central куда-то в их системные директории
- файлы проекта (manage.py, settings*.py, urls.py) — в /usr/lib/yandex/project
- media проекта — /usr/lib/yandex/project/media (однотипное место позволяет всем иметь шаблонный конфиг веб-сервера, например)
- media приложения — /usr/lib/yandex/project/media/app/
- меcто для пользовательской upload'ной media делается в /var/lib/yandex/project/something, и туда делается симлинк из /usr/lib/yandex/project/media
-
я использую http://code.tabed.org/pylor/file/b84e5ee51551/bdist_debian.py
достаточно сделать setup.py bdist_debian и получаю deb-пакет
записимости и пр. прописываются в setup.py http://code.tabed.org/pylor/file/b84e5ee51551/setup.py -
pawnhearts, джанговский проект, к сожалению, чисто питоном не ограничивается. cron-задачи, init-скрипты: всё это distutils'овским setup.py не описывается.
-
скрипт ещё и не правильный, он делает binary package который завязан на конкретную версию python`а а не python-support =(
по поводу инит скриптов и крона - можно же написать
data_files = [
('/etc/init.d', ['init.d/myapp']),
('/etc/cron.daily', ['cron.daily/myapp']),
] -
В последнее время, собиральщики deb крутятся вокруг http://pypi.python.org/pypi/stdeb/ . Штука ненавязчива и достаточно удобна. Использую в качестве генератора debian/* . Для большинства приложений django править ничего не нужно (за исключением, криво написанных setup.py :) ). Для проектов, в любом случае требуется ручная доводка, по озвученным Иваном причинам. Сборку непосредственно бинарных пакетов удобнее осуществлять при помощи стандартных средств пакетирования — pdebuild, например.
-
Возникли дополнительные вопросы:
1. syncdb делается в postinst или требуется ручное применение?
2. как обновляете структуру БД при изменениях в моделях?
Я сделаю автосоздание схемы по моделям при установке пакета. При накате последующих версий пакета это никак не отразится на схеме. А для обновления структуры я сделал простенькое приложение patcher, которое по очереди накладывает патчи на схему, учитывая их в своей модели.
Мысли приветствуются. -
- syncdb делается в postinst или требуется ручное применение?
- как обновляете структуру БД при изменениях в моделях?
У нас здесь не очень типичная ситуация, поэтому в качестве общего решения я бы это не рекомендовал. Смысл в том, что вместе с запросами на выкладку админам прикладываются SQL-файлы с тем, что надо делать в базе. Ни syncdb, никакие миграции в продакшне автоматически не накатываются. Их используют разработчики, чтобы получить sql-файлы.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.


