Fabric + buildout в отличие от Fabric + pip + virtualenv

Недавно я начал играть с Mezzanine, основанной на джанго CMS. Недавно мне удалось настроить Fabric, чтобы загрузить его на мой хост, webfaction.com, так как он немного больше задействовал автоматическое создание веб-сайта на общем хостинге, и я хотел автоматизировать этот процесс.

В целом, эта система использует Fabric для загрузки шаблонов файлов конфигурации и pip + virtualenv для обработки пакетов python.

Однако я недавно прочитал о buildout и о том, как некоторые люди клянутся им для развертывания, а другие нет. См. Здесь: удаленное развертывание Django с помощью buildout и Fabric и здесь: http://labs.creativecommons.org/2011/07/29/not-panicking-switching-to-virtualenv-for-deployment/

Пока я искал googled и нашел массу результатов для buildout vs. pip, не так много информации о buildout + fabric vs. pip + fabric. Похоже, что некоторые функции buildout (загрузка шаблонов конфигурации, диспетчер обработки) могут выполняться через ткань. Может ли кто-нибудь сказать мне преимущества и недостатки любого подхода?

Примечание. Поскольку я использую общий хостинг в обозримом будущем, я не могу использовать sudo, который, по-видимому, может потребоваться для создания нескольких существующих рецептов.

Ответ 1

Сводка: Pip только устанавливает пакеты python, и вам, очевидно, нужно сделать больше. Вы можете сделать большую часть дополнительной работы в buildout с тем преимуществом, что buildout делает это для вас как локально, так и на сервере. Ткань должна делать меньше, таким образом. Недостатком является дополнительная сложность сборки, поэтому, если вам достаточно нескольких пользовательских команд ткани, это может быть предпочтительным для вас. Итак: как компромисс работает для вас?

Длинная версия:

Pip отлично подходит для установки пакетов python для вашего проекта. Buildout хорошо настраивает практически все для проекта (включая пакеты python). Это разница в целях.

Теперь... вы вставляете ткань в микс. С помощью pip + fabric вы можете вызвать pip изнутри ткани, чтобы захватить все пакеты python, а затем вы сами используете саму, чтобы настроить все остальное. Файл конфигурации apache/nginx, создание пары каталогов ( "var/log/" ) и т.д.

С buildout + fabric вы уже настроили buildout, чтобы сделать много вещей, таких как создание каталогов и создание файлов из шаблонов, а также настройка супервизора и настройка cronjob для запуска диспетчера при @reboot. Таким образом, файл должен делать меньше.

Итак... вы меняете обязанности. Все, что вы можете сделать в buildout, вы можете сделать в ткани. Все, что вы можете сделать в buildout, вы можете делать с настраиваемыми скриптами python (или shell) в сочетании с pip ( "читать README для дополнительных команд, которые вам нужно сделать" ).

Buildout - хорошее место для того, чтобы делать что-то, если оно является неотъемлемой частью вашего проекта. Подумайте об этом так: если вам это нужно как на производстве на сервере, так и локально на вашей машине разработки, вам лучше сделать это в buildout. В противном случае вы также должны запускать ткань на своей локальной машине. Вы можете это сделать, но...

Я использую ткань в сочетании со сборкой, сам. Buildout предназначен для создания самого проекта, ткани для всего, что вокруг него. Некоторые примеры:

  • На самом деле клонирование сборки из git на рабочем сервере.

  • Git pull (и проверка правильного тега).

  • Перезапуск диспетчера.

Мое предложение: посмотрите на pypi для рецептов buildout, чтобы узнать, удобны ли они для вас. Сохраняют ли они вас достаточную работу, чтобы иметь смысл погрузиться в дополнительную сложность, что означает полная конфигурация сборки? Если вы не получите достаточного количества из buildout, вам может быть лучше с простой тканью + pip и множеством пользовательских команд в вашем файле ткани.

Ответ 2

Взгляните на fabtools, который добавляет много полезных функций построения в ваш файл. Я работал со всеми, Шеф-повар, Кукольный (кувалда для грецкого ореха). Я нахожу Ansible отличным для команд дефолтов, которые застревают, но не хотят изучать язык, но лично, хорошо организованный проект Fabric побеждает руками.