Мои проекты

Обновление и восстановление Commentail

Сохраняем согласованную копию сайта, проверяем миграции и репетируем восстановление.

Урок 20 / 22 · Commentail 1.3.2

Обновление библиотеки затрагивает не только файлы Python. Могут измениться таблицы, static и шаблоны. На рабочем сайте сначала подготовьте отдельную копию базы и репетицию; не проверяйте восстановление поверх единственного экземпляра данных.

Снимок до обновления

Сохраните текущие wheel/версии зависимостей, настройки, template overrides, media и секреты в защищённом месте. Сохраните тот же SECRET_KEY: от него зависят существующие ссылки Commentail. Секреты не прикладывайте к публичному issue или архиву курса.

Для финальной согласованной копии остановите записи на сайте и обработчик. SQLite копируйте через backup API, а не копированием живого файла отдельно от журнала:

python
import sqlite3

with sqlite3.connect("db.sqlite3") as source:
    with sqlite3.connect("backup.sqlite3") as destination:
        source.backup(destination)

Этот фрагмент запускается из папки вашей базы; пути измените под проект, назначение должно быть новым файлом. Для PostgreSQL можно сделать custom-format dump и восстановить его в отдельную пустую базу:

sh
pg_dump -Fc --file=site-backup.dump YOUR_DATABASE
pg_restore --exit-on-error --single-transaction --dbname=YOUR_EMPTY_RESTORE_DATABASE site-backup.dump

Команды требуют настроенных прав/подключения. pg_dump не сохраняет роли и tablespaces всего кластера; их обслуживают отдельно. Проверьте успех команды и доступность архива, а не только наличие имени файла.

Репетиция

В восстановленной копии оставьте почту локальной, чтобы не отправить реальные письма повторно. Установите проверенную версию, выполните migrate, check, collectstatic. Проверьте старые комментарии, ответы, ожидающие правки, права, Site/Page settings, overrides и существующие гостевые ссылки. Убедитесь, что импортируется установленный пакет, а не соседняя исходная папка.

Прочитайте release notes целевой и всех промежуточных версий. Для перехода с 1.3.1 на 1.3.2 новой миграции нет. Переход с 1.3.0 или раньше включает необратимую миграцию 0018: остановите старые writers и worker, сохраните SECRET_KEY, не запускайте старый и новый код против общей базы. Большие таблицы могут потребовать времени, блокировок и места транзакции.

Что означает откат

Замена wheel старой версией не отменяет преобразование данных. Проверьте восстановление согласованных старой базы, пакета и ключа до production. Восстановление старого снимка теряет более поздние записи. Очередь из снимка может содержать письма, отправленные после его создания: оставьте worker выключенным, разберите задания и только потом возобновляйте обработку.

После разрешённого рабочего обновления повторите проверку реального домена, почты и прокси, обновите static и перезапустите процессы. Успешное migrate не доказывает, что пользовательский сценарий работает.

Другие уроки по этой задаче

Документация по теме

Была ли статья полезна?

Комментарии 0

Имя: до 40 символов.

После отправки мы пришлём письмо со ссылкой для подтверждения email.

Не более 5000 символов.

Опубликованных комментариев пока нет.