Как кто-то, кто управляет несколькими веб-серверами, каждый из которых запускает набор сайтов Django, очень важно держать поверх моего стека Python. Из (вероятно, плохой) привычки я полагаюсь на Ubuntu для ряда моих пакетов Python, включая python-django и множество дополнительных функций python-django-*. Веб-сайты требуют, чтобы они запускались, но пока пакет все еще существует, это не проблема. Я делаю это вместо использования VirtualEnv (и др.), Потому что хочу, чтобы Ubuntu установил обновления безопасности.
Однако репозитории Ubuntu не обслуживают всех. Бывают случаи, когда я буду использовать pip или easy_install для вставки последней версии пакета Python. Когда вы обновляете Python (как это иногда бывает в Ubuntu), вы теряете все свои pip -установленные пакеты.
Что меня пугает, чем глубже я получаю, тем больше серверов я администрирую, Обновление ОС в один прекрасный день, для чего требуются часы и часы моего времени, тестирование сайтов, переустановка пакетов python через pip. Хуже всего это потенциальное время простоя для клиентских сайтов, хотя я тестирую свою машину разработки (всегда на Ubuntu-последнем), поэтому это должно компенсировать некоторые из этих проблем.
Я могу что-то сделать, чтобы сделать уверенные обновления Python означают, что существующие, не-dpgk'd пакеты Python продвигаются?
Это будет гарантировать, что у меня всегда был доступ к тем же пакетам. Мне все равно придется проверять несовместимость, но это было бы хорошим началом.
Возможно, есть одно лучшее решение: приложение, которое вел себя как apt и dpkg, но для взаимодействия с PyPi (где pip и easy_install получают большую часть своего mojo). Что-то, что хранит локальный список установленных пакетов, проверено на наличие обновлений, таких как apt, управляемая установка и т. Д. [D5] Можно ли что-то сделать, чтобы убедиться, что обновления для Python означают, что существующие, не-dpgk'd пакеты Python вывел вперед? Или это идея мусора?
Что касается сохранения ваших пакетов Python при обновлении системы Python: я вижу два варианта:
Вы можете установить материал без Ubuntu Python с помощью easy_install --install-dir /usr/local/python. Затем вы убедитесь, что все ваши веб-приложения включают этот каталог в sys.path, например, включив его в PYTHONPATH или используя каталог, который автоматически включается в site.py (чей документ гласит, что «Локальные аддоны переходят в /usr/local/lib/python<version>/dist-packages»). Вы можете использовать virtualenvs, если вы можете поместите все данные и конфигурацию приложения в каталог, не зависящий от кода. Вот процедура эскиза: a. Поместите все независящие от кода файлы в каталог myapp-data/ b. Создать virtualenv myapp-code.XXX/ (где XXX - это уникальный номер версии, например date -I) c. Поместите код приложения и все пакеты зависимостей в myapp-code.XXX d. ln -s myapp-code.XXX myapp-code Когда вам нужно обновить, вы просто повторяете шаги b. и c. с другим кодом редакции YYY, затем: остановить текущее приложение, symlink myapp-code до myapp-code.YYY, запустить приложение из virtualenv myapp-code.YYY. Если что-то пойдет не так, вы можете быстро вернуться к старому virtualenv.По-видимому, 2. больше работы (но pip плюс некоторые сценарии оболочки потребуют много времени для его автоматизации), но он также должен быть более надежным и позволит вам одновременно запускать приложения , которые зависят от разных версий некоторого пакета Python.
Что касается вашего вопроса о пакетах, отличных от apt-get для Python: pip явно запрещает такую вещь, и по уважительной причине: API-интерфейсы пакетов и поведение могут меняться в разных версиях. Поэтому, если ваш код отлично работает с версией X, он может выйти из строя при запуске с версией X + 1. [31] Конечно, тот же аргумент может быть применен к любой программе в двоичном дистрибутиве, таком как Ubuntu; действительно, что делает apt-get полезным то, что Debian и Ubuntu обеспечивают скоординированный выпуск совместимых пакетов: много усилий со стороны сопровождающих идет на обеспечение совместимости всех пакетов Ubuntu в основных репозиториях.
Подобного скоординированного релиза пакетов Python просто нет: каждый пакет независим, и нет никакой информации о том, какая версия других пакетов Python совместима с ним. (Это может быть хорошим дополнением к метаданным PyPI.)
Что касается сохранения ваших пакетов Python при обновлении системы Python: я вижу два варианта:
Вы можете установить материал без Ubuntu Python с помощью easy_install --install-dir /usr/local/python. Затем вы убедитесь, что все ваши веб-приложения включают этот каталог в sys.path, например, включив его в PYTHONPATH или используя каталог, который автоматически включается в site.py (в документе указано, что «Локальные аддоны переходят в /usr/local/lib/python<version>/dist-packages»). Вы можете использовать virtualenvs, если вы можете поместите все данные и конфигурацию приложения в каталог, не зависящий от кода. Вот процедура эскиза: a. Поместите все независящие от кода файлы в каталог myapp-data/ b. Создать virtualenv myapp-code.XXX/ (где XXX - это уникальный номер версии, например date -I) c. Поместите код приложения и все пакеты зависимостей в myapp-code.XXX d. ln -s myapp-code.XXX myapp-code Когда вам нужно обновить, вы просто повторяете шаги b. и c. с другим кодом редакции YYY, затем: остановить текущее приложение, symlink myapp-code до myapp-code.YYY, запустить приложение из virtualenv myapp-code.YYY. Если что-то пойдет не так, вы можете быстро вернуться к старому virtualenv.По-видимому, 2. больше работы (но pip плюс некоторые сценарии оболочки потребуют много времени для его автоматизации), но он также должен быть более надежным и позволит вам одновременно запускать приложения , которые зависят от разных версий некоторого пакета Python.
Что касается вашего вопроса о пакетах, отличных от apt-get для Python: pip явно запрещает такую вещь, и по уважительной причине: API-интерфейсы пакетов и поведение могут меняться в разных версиях. Поэтому, если ваш код отлично работает с версией X, он может выйти из строя при запуске с версией X + 1. [31] Конечно, тот же аргумент может быть применен к любой программе в двоичном дистрибутиве, таком как Ubuntu; действительно, что делает apt-get полезным то, что Debian и Ubuntu обеспечивают скоординированный выпуск совместимых пакетов: много усилий со стороны сопровождающих идет на обеспечение совместимости всех пакетов Ubuntu в основных репозиториях.
Подобного скоординированного релиза пакетов Python просто нет: каждый пакет независим, и нет никакой информации о том, какая версия других пакетов Python совместима с ним. (Это может быть хорошим дополнением к метаданным PyPI.)
Что касается сохранения ваших пакетов Python при обновлении системы Python: я вижу два варианта:
Вы можете установить материал без Ubuntu Python с помощью easy_install --install-dir /usr/local/python. Затем вы убедитесь, что все ваши веб-приложения включают этот каталог в sys.path, например, включив его в PYTHONPATH или используя каталог, который автоматически включается в site.py (в документе указано, что «Локальные аддоны переходят в /usr/local/lib/python<version>/dist-packages»). Вы можете использовать virtualenvs, если вы можете поместите все данные и конфигурацию приложения в каталог, не зависящий от кода. Вот процедура эскиза: a. Поместите все независящие от кода файлы в каталог myapp-data/ b. Создать virtualenv myapp-code.XXX/ (где XXX - это уникальный номер версии, например date -I) c. Поместите код приложения и все пакеты зависимостей в myapp-code.XXX d. ln -s myapp-code.XXX myapp-code Когда вам нужно обновить, вы просто повторяете шаги b. и c. с другим кодом редакции YYY, затем: остановить текущее приложение, symlink myapp-code до myapp-code.YYY, запустить приложение из virtualenv myapp-code.YYY. Если что-то пойдет не так, вы можете быстро вернуться к старому virtualenv.По-видимому, 2. больше работы (но pip плюс некоторые сценарии оболочки потребуют много времени для его автоматизации), но он также должен быть более надежным и позволит вам одновременно запускать приложения , которые зависят от разных версий некоторого пакета Python.
Что касается вашего вопроса о пакетах, отличных от apt-get для Python: pip явно запрещает такую вещь, и по уважительной причине: API-интерфейсы пакетов и поведение могут меняться в разных версиях. Поэтому, если ваш код отлично работает с версией X, он может выйти из строя при запуске с версией X + 1. [31] Конечно, тот же аргумент может быть применен к любой программе в двоичном дистрибутиве, таком как Ubuntu; действительно, что делает apt-get полезным то, что Debian и Ubuntu обеспечивают скоординированный выпуск совместимых пакетов: много усилий со стороны сопровождающих идет на обеспечение совместимости всех пакетов Ubuntu в основных репозиториях.
Подобного скоординированного релиза пакетов Python просто нет: каждый пакет независим, и нет никакой информации о том, какая версия других пакетов Python совместима с ним. (Это может быть хорошим дополнением к метаданным PyPI.)
Что касается сохранения ваших пакетов Python при обновлении системы Python: я вижу два варианта:
Вы можете установить материал без Ubuntu Python с помощью easy_install --install-dir /usr/local/python. Затем вы убедитесь, что все ваши веб-приложения включают этот каталог в sys.path, например, включив его в PYTHONPATH или используя каталог, который автоматически включается в site.py (в документе указано, что «Локальные аддоны переходят в /usr/local/lib/python<version>/dist-packages»). Вы можете использовать virtualenvs, если вы можете поместите все данные и конфигурацию приложения в каталог, не зависящий от кода. Вот процедура эскиза: a. Поместите все независящие от кода файлы в каталог myapp-data/ b. Создать virtualenv myapp-code.XXX/ (где XXX - это уникальный номер версии, например date -I) c. Поместите код приложения и все пакеты зависимостей в myapp-code.XXX d. ln -s myapp-code.XXX myapp-code Когда вам нужно обновить, вы просто повторяете шаги b. и c. с другим кодом редакции YYY, затем: остановить текущее приложение, symlink myapp-code до myapp-code.YYY, запустить приложение из virtualenv myapp-code.YYY. Если что-то пойдет не так, вы можете быстро вернуться к старому virtualenv.По-видимому, 2. больше работы (но pip плюс некоторые сценарии оболочки потребуют много времени для его автоматизации), но он также должен быть более надежным и позволит вам одновременно запускать приложения , которые зависят от разных версий некоторого пакета Python.
Что касается вашего вопроса о пакетах, отличных от apt-get для Python: pip явно запрещает такую вещь, и по уважительной причине: API-интерфейсы пакетов и поведение могут меняться в разных версиях. Поэтому, если ваш код отлично работает с версией X, он может выйти из строя при запуске с версией X + 1. [31] Конечно, тот же аргумент может быть применен к любой программе в двоичном дистрибутиве, таком как Ubuntu; действительно, что делает apt-get полезным то, что Debian и Ubuntu обеспечивают скоординированный выпуск совместимых пакетов: много усилий со стороны сопровождающих идет на обеспечение совместимости всех пакетов Ubuntu в основных репозиториях.
Подобного скоординированного релиза пакетов Python просто нет: каждый пакет независим, и нет никакой информации о том, какая версия других пакетов Python совместима с ним. (Это может быть хорошим дополнением к метаданным PyPI.)
Относительно того, как сохранить ваши пакеты Python при обновлении системы Python: я вижу два варианта:
easy_install --install-dir / usr / local / python
Затем вы убедитесь, что все ваши веб-приложения включают этот каталог в sys.path
, например, включив его в PYTHONPATH или используя каталог, который автоматически включается в site.py
(в документе говорится, что «Локальные аддоны переходят в / usr / local / lib / python & lt; version & gt; / dist-packages
") myapp-data /
b. Создать virtualenv myapp-code.XXX /
(где XXX
- это уникальный номер версии, например, date -I
) c. Поместите код приложения и все пакеты зависимостей в myapp-code.XXX
d. ln -s myapp-code.XXX myapp-code
Когда вам нужно обновить, вы просто повторяете шаги b. и c. с другим кодом редакции YYY, затем: остановить текущее приложение, symlink myapp-code
до myapp-code.YYY
, запустить приложение из virtualenv myapp-code. YYY
. Если что-то пойдет не так, вы можете быстро вернуться к старому виртуальному окну. По-видимому, 2. больше работы (но pip
плюс некоторые shell-скрипты будут долгий путь к автоматизации), но он также должен быть более надежным и позволит вам одновременно запускать приложения, зависящие от разных версий пакета Python.
Что касается вашего вопроса о apt-get
-like для пакетов Python: pip
явно запрещает такую вещь, и по уважительной причине: API-интерфейсы пакетов и поведение могут меняться в разных версиях. Поэтому, если ваш код отлично работает с версией X, он может выйти из строя при запуске с версией X + 1. Это pip
пытается предотвратить с помощью функций «замораживания» и «списка требований».
Конечно, тот же аргумент может быть применен к любой программе в двоичном дистрибутиве как Ubuntu; действительно, что делает apt-get
полезным то, что Debian и Ubuntu предоставляют скоординированный выпуск совместимых пакетов: много усилий со стороны сопровождающих идет на обеспечение того, чтобы все пакеты Ubuntu в основные репозитории совместимы.
Существует такой скоординированный выпуск пакетов Python: каждый пакет является независимым, и нет никакой информации о том, какая версия других пакетов Python совместима с ним. (Это может быть хорошим дополнением к метаданным PyPI.)
Относительно того, как сохранить ваши пакеты Python при обновлении системы Python: я вижу два варианта:
easy_install --install-dir / usr / local / python
Затем вы убедитесь, что все ваши веб-приложения включают этот каталог в sys.path
, например, включив его в PYTHONPATH или используя каталог, который автоматически включается в site.py
(в документе говорится, что «Локальные аддоны переходят в / usr / local / lib / python & lt; version & gt; / dist-packages
") myapp-data /
b. Создать virtualenv myapp-code.XXX /
(где XXX
- это уникальный номер версии, например, date -I
) c. Поместите код приложения и все пакеты зависимостей в myapp-code.XXX
d. ln -s myapp-code.XXX myapp-code
Когда вам нужно обновить, вы просто повторяете шаги b. и c. с другим кодом редакции YYY, затем: остановить текущее приложение, symlink myapp-code
до myapp-code.YYY
, запустить приложение из virtualenv myapp-code. YYY
. Если что-то пойдет не так, вы можете быстро вернуться к старому виртуальному окну. По-видимому, 2. больше работы (но pip
плюс некоторые shell-скрипты будут долгий путь к автоматизации), но он также должен быть более надежным и позволит вам одновременно запускать приложения, зависящие от разных версий пакета Python.
Что касается вашего вопроса о apt-get
-like для пакетов Python: pip
явно запрещает такую вещь, и по уважительной причине: API-интерфейсы пакетов и поведение могут меняться в разных версиях. Поэтому, если ваш код отлично работает с версией X, он может выйти из строя при запуске с версией X + 1. Это pip
пытается предотвратить с помощью функций «замораживания» и «списка требований».
Конечно, тот же аргумент может быть применен к любой программе в двоичном дистрибутиве как Ubuntu; действительно, что делает apt-get
полезным то, что Debian и Ubuntu предоставляют скоординированный выпуск совместимых пакетов: много усилий со стороны сопровождающих идет на обеспечение того, чтобы все пакеты Ubuntu в основные репозитории совместимы.
Существует такой скоординированный выпуск пакетов Python: каждый пакет является независимым, и нет никакой информации о том, какая версия других пакетов Python совместима с ним. (Это может быть хорошим дополнением к метаданным PyPI.)
Относительно того, как сохранить ваши пакеты Python при обновлении системы Python: я вижу два варианта:
easy_install --install-dir / usr / local / python
Затем вы убедитесь, что все ваши веб-приложения включают этот каталог в sys.path
, например, включив его в PYTHONPATH или используя каталог, который автоматически включается в site.py
(в документе говорится, что «Локальные аддоны переходят в / usr / local / lib / python & lt; version & gt; / dist-packages
") myapp-data /
b. Создать virtualenv myapp-code.XXX /
(где XXX
- это уникальный номер версии, например, date -I
) c. Поместите код приложения и все пакеты зависимостей в myapp-code.XXX
d. ln -s myapp-code.XXX myapp-code
Когда вам нужно обновить, вы просто повторяете шаги b. и c. с другим кодом редакции YYY, затем: остановить текущее приложение, symlink myapp-code
до myapp-code.YYY
, запустить приложение из virtualenv myapp-code. YYY
. Если что-то пойдет не так, вы можете быстро вернуться к старому виртуальному окну. По-видимому, 2. больше работы (но pip
плюс некоторые shell-скрипты будут долгий путь к автоматизации), но он также должен быть более надежным и позволит вам одновременно запускать приложения, зависящие от разных версий пакета Python.
Что касается вашего вопроса о apt-get
-like для пакетов Python: pip
явно запрещает такую вещь, и по уважительной причине: API-интерфейсы пакетов и поведение могут меняться в разных версиях. Поэтому, если ваш код отлично работает с версией X, он может выйти из строя при запуске с версией X + 1. Это pip
пытается предотвратить с помощью функций «замораживания» и «списка требований».
Конечно, тот же аргумент может быть применен к любой программе в двоичном дистрибутиве как Ubuntu; действительно, что делает apt-get
полезным то, что Debian и Ubuntu предоставляют скоординированный выпуск совместимых пакетов: много усилий со стороны сопровождающих идет на обеспечение того, чтобы все пакеты Ubuntu в основные репозитории совместимы.
Существует такой скоординированный выпуск пакетов Python: каждый пакет является независимым, и нет никакой информации о том, какая версия других пакетов Python совместима с ним. (Это может быть хорошим дополнением к метаданным PyPI.)
Относительно того, как сохранить ваши пакеты Python при обновлении системы Python: я вижу два варианта:
easy_install --install-dir / usr / local / python
Затем вы убедитесь, что все ваши веб-приложения включают этот каталог в sys.path
, например, включив его в PYTHONPATH или используя каталог, который автоматически включается в site.py
(в документе говорится, что «Локальные аддоны переходят в / usr / local / lib / python & lt; version & gt; / dist-packages
") myapp-data /
b. Создать virtualenv myapp-code.XXX /
(где XXX
- это уникальный номер версии, например, date -I
) c. Поместите код приложения и все пакеты зависимостей в myapp-code.XXX
d. ln -s myapp-code.XXX myapp-code
Когда вам нужно обновить, вы просто повторяете шаги b. и c. с другим кодом редакции YYY, затем: остановить текущее приложение, symlink myapp-code
до myapp-code.YYY
, запустить приложение из virtualenv myapp-code. YYY
. Если что-то пойдет не так, вы можете быстро вернуться к старому виртуальному окну. По-видимому, 2. больше работы (но pip
плюс некоторые shell-скрипты будут долгий путь к автоматизации), но он также должен быть более надежным и позволит вам одновременно запускать приложения, зависящие от разных версий пакета Python.
Что касается вашего вопроса о apt-get
-like для пакетов Python: pip
явно запрещает такую вещь, и по уважительной причине: API-интерфейсы пакетов и поведение могут меняться в разных версиях. Поэтому, если ваш код отлично работает с версией X, он может выйти из строя при запуске с версией X + 1. Это pip
пытается предотвратить с помощью функций «замораживания» и «списка требований».
Конечно, тот же аргумент может быть применен к любой программе в двоичном дистрибутиве как Ubuntu; действительно, что делает apt-get
полезным то, что Debian и Ubuntu предоставляют скоординированный выпуск совместимых пакетов: много усилий со стороны сопровождающих идет на обеспечение того, чтобы все пакеты Ubuntu в основные репозитории совместимы.
Существует такой скоординированный выпуск пакетов Python: каждый пакет является независимым, и нет никакой информации о том, какая версия других пакетов Python совместима с ним. (Это может быть хорошим дополнением к метаданным PyPI.)
Относительно того, как сохранить ваши пакеты Python при обновлении системы Python: я вижу два варианта:
easy_install --install-dir / usr / local / python
Затем вы убедитесь, что все ваши веб-приложения включают этот каталог в sys.path
, например, включив его в PYTHONPATH или используя каталог, который автоматически включается в site.py
(в документе говорится, что «Локальные аддоны переходят в / usr / local / lib / python & lt; version & gt; / dist-packages
") myapp-data /
b. Создать virtualenv myapp-code.XXX /
(где XXX
- это уникальный номер версии, например, date -I
) c. Поместите код приложения и все пакеты зависимостей в myapp-code.XXX
d. ln -s myapp-code.XXX myapp-code
Когда вам нужно обновить, вы просто повторяете шаги b. и c. с другим кодом редакции YYY, затем: остановить текущее приложение, symlink myapp-code
до myapp-code.YYY
, запустить приложение из virtualenv myapp-code. YYY
. Если что-то пойдет не так, вы можете быстро вернуться к старому виртуальному окну. По-видимому, 2. больше работы (но pip
плюс некоторые shell-скрипты будут долгий путь к автоматизации), но он также должен быть более надежным и позволит вам одновременно запускать приложения, зависящие от разных версий пакета Python.
Что касается вашего вопроса о apt-get
-like для пакетов Python: pip
явно запрещает такую вещь, и по уважительной причине: API-интерфейсы пакетов и поведение могут меняться в разных версиях. Поэтому, если ваш код отлично работает с версией X, он может выйти из строя при запуске с версией X + 1. Это pip
пытается предотвратить с помощью функций «замораживания» и «списка требований».
Конечно, тот же аргумент может быть применен к любой программе в двоичном дистрибутиве как Ubuntu; действительно, что делает apt-get
полезным то, что Debian и Ubuntu предоставляют скоординированный выпуск совместимых пакетов: много усилий со стороны сопровождающих идет на обеспечение того, чтобы все пакеты Ubuntu в основные репозитории совместимы.
Существует такой скоординированный выпуск пакетов Python: каждый пакет является независимым, и нет никакой информации о том, какая версия других пакетов Python совместима с ним. (Это может быть хорошим дополнением к метаданным PyPI.)
Относительно того, как сохранить ваши пакеты Python при обновлении системы Python: я вижу два варианта:
easy_install --install-dir / usr / local / python
Затем вы убедитесь, что все ваши веб-приложения включают этот каталог в sys.path
, например, включив его в PYTHONPATH или используя каталог, который автоматически включается в site.py
(в документе говорится, что «Локальные аддоны переходят в / usr / local / lib / python & lt; version & gt; / dist-packages
") myapp-data /
b. Создать virtualenv myapp-code.XXX /
(где XXX
- это уникальный номер версии, например, date -I
) c. Поместите код приложения и все пакеты зависимостей в myapp-code.XXX
d. ln -s myapp-code.XXX myapp-code
Когда вам нужно обновить, вы просто повторяете шаги b. и c. с другим кодом редакции YYY, затем: остановить текущее приложение, symlink myapp-code
до myapp-code.YYY
, запустить приложение из virtualenv myapp-code. YYY
. Если что-то пойдет не так, вы можете быстро вернуться к старому виртуальному окну. По-видимому, 2. больше работы (но pip
плюс некоторые shell-скрипты будут долгий путь к автоматизации), но он также должен быть более надежным и позволит вам одновременно запускать приложения, зависящие от разных версий пакета Python.
Что касается вашего вопроса о apt-get
-like для пакетов Python: pip
явно запрещает такую вещь, и по уважительной причине: API-интерфейсы пакетов и поведение могут меняться в разных версиях. Поэтому, если ваш код отлично работает с версией X, он может выйти из строя при запуске с версией X + 1. Это pip
пытается предотвратить с помощью функций «замораживания» и «списка требований».
Конечно, тот же аргумент может быть применен к любой программе в двоичном дистрибутиве как Ubuntu; действительно, что делает apt-get
полезным то, что Debian и Ubuntu предоставляют скоординированный выпуск совместимых пакетов: много усилий со стороны сопровождающих идет на обеспечение того, чтобы все пакеты Ubuntu в основные репозитории совместимы.
Существует такой скоординированный выпуск пакетов Python: каждый пакет является независимым, и нет никакой информации о том, какая версия других пакетов Python совместима с ним. (Это может быть хорошим дополнением к метаданным PyPI.)
Я бы использовал систему управления конфигурацией, такую как марионетка или шеф-повар, для запуска скриптов на всех серверах, чтобы синхронизировать их все. Ваши сценарии (рецепты) могут управлять обновлением, включая автоматическое тестирование, если обновление было успешным или что-то сломало.
Я бы использовал систему управления конфигурацией, такую как марионетка или шеф-повар, для запуска скриптов на всех серверах, чтобы синхронизировать их все. Ваши сценарии (рецепты) могут управлять обновлением, включая автоматическое тестирование, если обновление было успешным или что-то сломало.
Я бы использовал систему управления конфигурацией, такую как марионетка или шеф-повар, для запуска скриптов на всех серверах, чтобы синхронизировать их все. Ваши сценарии (рецепты) могут управлять обновлением, включая автоматическое тестирование, если обновление было успешным или что-то сломало.
Я бы использовал систему управления конфигурацией, такую как марионетка или шеф-повар, для запуска скриптов на всех серверах, чтобы синхронизировать их все. Ваши сценарии (рецепты) могут управлять обновлением, включая автоматическое тестирование, если обновление было успешным или что-то сломало.
Я бы использовал систему управления конфигурацией, такую как puppet или chef , чтобы запускать скрипты на всех серверах, чтобы синхронизировать их все. Ваши скрипты (рецепты) могут управлять обновлением, включая автоматическое тестирование, если обновление было успешным или что-то сломало.
Я бы использовал систему управления конфигурацией, такую как puppet или chef , чтобы запускать скрипты на всех серверах, чтобы синхронизировать их все. Ваши скрипты (рецепты) могут управлять обновлением, включая автоматическое тестирование, если обновление было успешным или что-то сломало.
Я бы использовал систему управления конфигурацией, такую как puppet или chef , чтобы запускать скрипты на всех серверах, чтобы синхронизировать их все. Ваши скрипты (рецепты) могут управлять обновлением, включая автоматическое тестирование, если обновление было успешным или что-то сломало.
Я бы использовал систему управления конфигурацией, такую как puppet или chef , чтобы запускать скрипты на всех серверах, чтобы синхронизировать их все. Ваши скрипты (рецепты) могут управлять обновлением, включая автоматическое тестирование, если обновление было успешным или что-то сломало.
Я бы использовал систему управления конфигурацией, такую как puppet или chef , чтобы запускать скрипты на всех серверах, чтобы синхронизировать их все. Ваши скрипты (рецепты) могут управлять обновлением, включая автоматическое тестирование, если обновление было успешным или что-то сломало.
Я бы использовал систему управления конфигурацией, такую как puppet или chef , чтобы запускать скрипты на всех серверах, чтобы синхронизировать их все. Ваши скрипты (рецепты) могут управлять обновлением, включая автоматическое тестирование, если обновление было успешным или что-то сломало.