1. Ruslan Popov

    07.03.2010

    3 ↑
    0 ↓
    Доброе время суток.

    Пришло время выкладывать проект в продакшн, всё осложняется тем, что у меня не будет доступа по сети к системе после инсталляции, а ездить не всегда удобно. Поэтому я сейчас подробно разбираю процесс установки и обновления проекта с помощью стандартных пакетов Debian, к чему меня сподвигла статья http://softwaremaniacs.org/blog/2007/08/15/deb-packages-in-yandex/

    С самой сборкой пакетов проблем нет.

    Вопрос в том, как правильно раскидать сам код сайта, статику по файловой системе, куда выложить settings.py?
  2. Иван Сагалаев

    07.03.2010

    4 ↑
    0 ↓

    Руслан, вам насколько срочно это надо? У меня довольно давно лежит драфт поста с подробным описанием того, как мы это делаем, но я всего его откладываю, потому что у нас это всё ещё далеко не в финальном виде...

  3. Ruslan Popov

    08.03.2010

    0 ↑
    0 ↓
    Вчера! :)

    Драфт пойдет. Софт готов, оборудование настроено, дело только в пакете.
    По результатам готов отписаться с подробностями.

    ruslan.popov@gmail.com
  4. Grigory Fateyev

    08.03.2010

    0 ↑
    0 ↓
    Иван, мне бы тоже это было интересно.
  5. Думаю, что это было бы интересно многим. И почему deb, а не fabric? ;)

  6. Иван Сагалаев

    08.03.2010

    1 ↑
    0 ↓

    Руслан, драфта, к сожалению, в электронном виде нет, он в разрозненном состоянии в голове :-). Так что вчера не успею :-).

    Но если совсем коротко:

    • мы используем 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
  7. pawnhearts

    08.03.2010

    1 ↑
    0 ↓
    я использую 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
  8. Иван Сагалаев

    08.03.2010

    0 ↑
    0 ↓

    pawnhearts, джанговский проект, к сожалению, чисто питоном не ограничивается. cron-задачи, init-скрипты: всё это distutils'овским setup.py не описывается.

  9. pawnhearts

    09.03.2010

    0 ↑
    0 ↓
    скрипт ещё и не правильный, он делает binary package который завязан на конкретную версию python`а а не python-support =(
    по поводу инит скриптов и крона - можно же написать
    data_files = [
    ('/etc/init.d', ['init.d/myapp']),
    ('/etc/cron.daily', ['cron.daily/myapp']),
    ]
  10. admin

    09.03.2010

    2 ↑
    0 ↓
    В последнее время, собиральщики deb крутятся вокруг http://pypi.python.org/pypi/stdeb/ . Штука ненавязчива и достаточно удобна. Использую в качестве генератора debian/* . Для большинства приложений django править ничего не нужно (за исключением, криво написанных setup.py :) ). Для проектов, в любом случае требуется ручная доводка, по озвученным Иваном причинам. Сборку непосредственно бинарных пакетов удобнее осуществлять при помощи стандартных средств пакетирования — pdebuild, например.
  11. Ruslan Popov

    11.03.2010

    0 ↑
    0 ↓
    Возникли дополнительные вопросы:
    1. syncdb делается в postinst или требуется ручное применение?
    2. как обновляете структуру БД при изменениях в моделях?

    Я сделаю автосоздание схемы по моделям при установке пакета. При накате последующих версий пакета это никак не отразится на схеме. А для обновления структуры я сделал простенькое приложение patcher, которое по очереди накладывает патчи на схему, учитывая их в своей модели.

    Мысли приветствуются.
  12. Иван Сагалаев

    15.03.2010

    0 ↑
    0 ↓
    1. syncdb делается в postinst или требуется ручное применение?
    2. как обновляете структуру БД при изменениях в моделях?

    У нас здесь не очень типичная ситуация, поэтому в качестве общего решения я бы это не рекомендовал. Смысл в том, что вместе с запросами на выкладку админам прикладываются SQL-файлы с тем, что надо делать в базе. Ни syncdb, никакие миграции в продакшне автоматически не накатываются. Их используют разработчики, чтобы получить sql-файлы.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.