Django и Лучшие практики VirtualEnv разработки/развертывания

Просто любопытный, как люди развертывают свои проекты Django в сочетании с virtualenv

  • Строго говоря, как Вы сохраняете свой производственный virtualenv's синхронизировавшим правильно с Вашей машиной разработки?

Я использую мерзавца для scm, но у меня нет своего virtualenv в мерзавце repo - должен я, или лучше использовать замораживание зернышка и затем воссоздать среду на сервере с помощью вывода замораживания? (Если Вы делаете это, могли Вы описывать шаги - я нахожу, что очень мало хорошей документации относительно процесса размораживания - является чем-то как pip install -r freeze_output.txt возможный?)

38
задан edub 10 February 2010 в 23:14
поделиться

2 ответа

Я только что установил нечто подобное на работе, используя pip, Fabric и git. Поток в основном выглядит так, и в значительной степени заимствован из этого скрипта:

  1. В нашем дереве исходников мы поддерживаем файл requirements.txt. Мы будем поддерживать его вручную.
  2. Когда мы делаем новый релиз, сценарий Fabric создает архив на основе любого дерева, которое мы ему передаем.
  3. Fabric найдет SHA для того, что мы развертываем с помощью git log -1 --format=format:%h TREEISH. Это дает нам SHA_OF_THE_RELEASE
  4. Fabric получит последний SHA для нашего файла требований с помощью git log -1 --format=format:%h SHA_OF_THE_RELEASE requirements.txt. Это выдаст короткую версию хэша, например 1d02afc, которая является SHA для этого файла для данного конкретного выпуска.
  5. Затем скрипт Fabric ищет каталог, где хранятся наши virtualenvs на удаленном узле (узлах).
    1. Если директория с именем 1d02afc отсутствует, создается новая virtualenv и настраивается с помощью pip install -E /path/to/venv/1d02afc -r /path/to/requirements. txt
    2. Если есть существующий path/to/venv/1d02afc, ничего не делается

Маленькая волшебная часть этого - передача любого дерева, которое вы хотите, в git, и его упаковка (из Fabric). Используя git archive my-branch, git archive 1d02afc или что-то ещё, я гарантированно получу нужные пакеты, установленные на моих удалённых машинах.

Я пошел по этому пути, поскольку не хотел иметь лишние virtuenvs, если пакеты не менялись между релизами. Мне также не нравится идея иметь пакеты, от которых я завишу, в моем собственном дереве исходных текстов.

21
ответ дан 27 November 2019 в 03:56
поделиться

Перед внесением изменения можно сохранить положение курсора, а затем восстановить его:

int i = richTextBox1.SelectionStart;
richTextBox1.Text += "foo";
richTextBox1.SelectionStart = i;

Если не требуется удалять подсветку, можно также выполнить то же самое с помощью SeliceLength. Обратите внимание, что это может вызвать странное поведение, если вставленный текст находится внутри выделенной области. Затем необходимо расширить выделенный фрагмент, включив в него длину вставленного текста.

-121--3119888-

dict.fromkeys ([1, 2, 3, 4])

Это фактически классический метод, поэтому он также работает для подклассов dict (например, collections.defaultdict ). Дополнительный второй аргумент указывает значение, используемое для ключей (по умолчанию Нет .)

-121--6â91-

Я использую эту bootstrap.py: http://github.com/ccnmtl/ccnmtldjango/blob/master/ccnmtldjango/template/bootstrap.py

, которая ожидает, что каталог называется "требования", который выглядит примерно так: http://github.com/ccnmtl/ccnmtldjango/tree/master/ccnmtldjango/template/requirements/

Есть apps.txt, libs.txt (который apps.txt includes - я просто люблю держать приложения django отдельно от других модулей python) и каталог src, который содержит

При запуске ./bootstrap.py он создает virtualenv (стирание предыдущего, если он существует) и устанавливает в него все, что соответствует требованиям/apps.txt. В противном случае я никогда ничего не устанавливаю в virtualenv. Если я хочу включить новую библиотеку, я поместил тарбол в требования/src/, добавить строку в один из текстовых файлов и запустить заново ./bootstrap.py.

bootstrap.py и требования проверяются в системе управления версиями (также копия pip.py, поэтому мне даже не нужно устанавливать эту систему в масштабах всей системы). Сам виртуален - нет. Сценарии, выдаваемые на производственный сервер, запускаются ./bootstrap.py на производственном сервере каждый раз. (bootstrap.py также идет на некоторые длины, чтобы убедиться, что он придерживается Python 2.5, так как это то, что мы имеем на производственных серверах (Ubuntu Hardy) и моей машины для разработки (Ubuntu Karmic) по умолчанию Python 2.6, если вы не осторожны)

4
ответ дан 27 November 2019 в 03:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: