Ответ 1
Я бы использовал Mercurial Queues для чего-то подобного. Храните основной репозиторий в качестве версии для разработки и используйте патч for-production
, который вносит любые необходимые изменения для производства.
Я - веб-разработчик, работающий самостоятельно, используя django, и я пытаюсь разгадать, как лучше всего развертывать сайты, используя меркурий. Я хотел бы иметь возможность хранить один репозиторий, который я могу использовать для производства и разработки. Между производством и развитием всегда будут какие-то различия (например, они могут использовать разные базы данных, при разработке всегда будет включен отладка), но по большому счету они будут синхронизироваться. Я также хотел бы иметь возможность вносить изменения непосредственно на производственный сервер (убирать html или css, простые исправления и т.д.).
Рабочий процесс, который я намерен использовать для этого, выглядит следующим образом:
Примечание. Вы также можете внести изменения прямо в prod, пока вы пересаживаете изменения в dev.
Этот рабочий процесс имеет тот недостаток, что всякий раз, когда вы вносите изменения, вы должны не только фиксировать его на какую-либо ветку, в которую вы вносили изменения, но и пересаживать ее в другую ветку. Есть ли более разумный способ делать то, что я хочу здесь, возможно, используя патчи? Или, если это не так, есть способ автоматизировать процесс фиксации, чтобы автоматически пересадить набор изменений в другую ветвь, и будет ли это хорошей идеей?
Я бы использовал Mercurial Queues для чего-то подобного. Храните основной репозиторий в качестве версии для разработки и используйте патч for-production
, который вносит любые необходимые изменения для производства.
Вот два возможных решения, в которых используется ртутный и один, не использующий ртуть:
Я решил это с локальными настройками.
Добавить в settings.py:
try:
from local_settings import *
except ImportError:
pass
touch local_settings.py
^local_settings.py$
в свой .hgignore
Каждое развертывание, которое у меня есть, имеет собственные локальные настройки (обычно разные элементы базы данных и разные адреса электронной почты происхождения).
PS: Только читайте "уменьшенные версии части javascript" позже. Для этого я хотел бы предложить крюк после обновления и настройку конфигурации (например, JS_EXTENSION).
Пример (с вершины моей головы! не проверены, при необходимости приспособитесь):
settings.py
файл;local_settings.py
файл на рабочем сервере;
<script type="text/javascript" src="blabla.js"></script>
Для того, чтобы:
<script type="text/javascript" src="blabla{{JS_EXTENSION}}"></script>
*.raw.js
и генерирует .mini.js
(сокращенные версии raw);.mini.js$
к вашему .hgignore
Возможно, попробуйте что-то вроде этого: (Я просто думал об этой проблеме, в моем случае это база данных sqlite)
settings.py
в .hgignore, чтобы сохранить его вне репозитория.settings.py
из двух отдельных ветвей и переместите их в два отдельных файла, settings-prod.py
и settings-dev.py
Если у вас есть несколько дополнительных файлов, сделайте то же самое для них. Если у вас много файлов, но они все в одном каталоге сами по себе, вы можете просто создать пару каталогов: production
и development
, а затем скопировать или сопоставить соответствующую ссылку в deploy
каталог.
Если вы сделали что-то подобное, вы можете отказаться от необходимости разветвления вашего репозитория.
Я на самом деле делаю это с использованием названных ветвей и прямого слияния вместо пересадки (что более надежно, ИМО). Обычно это работает, хотя иногда (когда вы редактировали разные файлы на другой ветке), вам нужно обратить внимание, чтобы не удалять различия снова при слиянии.
Таким образом, он отлично работает, если вы не меняете разные файлы.