Поддерживаем Клуб #7
В предыдущих статьях мы поднимали свой собственный Клуб на платформе Vas3k. Дело закончилось тем, что мы этот самый Клуб успешно запустили в продакшен и даже настроили автоматический бэкап!
Воно как это было: https://teletype.in/@toptuk/pmiclub6
Сегодня я бы хотел вместе с Вами, дорогой читатель, поговорить про дальнейшую поддержку Клуба. Давайте обсудим, каким же образом осуществить синхронизацию кодовой базы с мастер репозиторием Vas3k'а и как править ошибки.
Эту статью меня сподвигло написать фатальные изменения кода Vas3k Клуба, когда поменялась предметная область авторизации.
Синхронизация кодовой базы
При разработке Клуба мы договаривались, что у нас будет 3 ветки кода в репозитории форка Клуба Vas3k'а:
- dev - ветка для наших локальных доработок.
- master - ветка со стабильным кодом, который протестирован локально.
- deploy - ветка для деплоя Клуба в продакшен среду. Тут содержится именно та версия нашей кодовой базы, которую видят все пользователи.
Синхронизировать доработки мы будем с dev веткой 🐈 Приступим...
Наша задача интегрировать в наш репозиторий все закрыл Pull Request из репозитория Vas3k'а: ссылка
Чтобы перенести изменения из исходного репозитория в репозитарий форка, нам необходимо добавить исходный репозиторий git в качестве основного репозитория ("upstream"). Для этого, локально выполним следующие действия:
- Запускаем консоль (командную строку в Windows или термина в Linux/Mac)
- Переходим в директорию репозитария форка
- Выполняем следующие команды для получения списка настроенных удаленных репозитариев
git remote -v
origin https://github.com/[Your UserName]/[Your Fork].git (fetch)
origin https://github.com/[Your UserName]/[Your Fork].git (push)git remote add upstream https://github.com/vas3k/vas3k.club.git
- Если повторно выполнить команду для получения списка настроенных удаленных репозитариев, то получится следующая картина
$ git remote -v origin https://github.com/[Your UserName]/[Your Fork].git (fetch) origin https://github.com/[Your UserName]/[Your Fork].git (push) upstream https://github.com/vas3k/vas3k.club.git (fetch) upstream https://github.com/vas3k/vas3k.club.git (push)
Сейчас все готово для интеграции изменений из оригинального репозитория Vas3k'а в ваше репозиторий форка.
Слияние (merge) изменений из оригинального репозитария
Прежде всего, нужно получить все изменения из исходного репозитория. Обратите внимание, что фиксации в исходном репозитории будут храниться в локальной ветке с именем upstream/master.
$ git fetch upstream remote: Counting objects: 75, done. remote: Compressing objects: 100% (53/53), done. remote: Total 62 (delta 27), reused 44 (delta 9) Unpacking objects: 100% (62/62), done. From https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY * [new branch] master -> upstream/master
Переключимся или убедимся, что текущая рабочая ветка это dev ветка
$ git checkout dev Switched to branch 'dev'
Осуществим слияние изменений из оригинального репозитария Vas3k'а в свой репозитарий. Это приведет к синхронизации dev ветки вашего форка с оригинальным репозиторием Vas3k'а без потери локальных изменений.
Скорее всего в результате слияния изменений появятся множество конфликтов, которые нужно разрешить, прежде чем завершить слияние.
$ git merge upstream/master Updating a422352..5fdff0f Fast-forward ....
В результате устранения конфликтов останется только залить изменения и запустить деплой нашего Клуба в продакшен
git push origin dev
ИТОГО
Для последующей синхронизации изменений из репозитария Vas3k Клуба нужно выполнить следующие команды:
$ git fetch upstream $ git checkout dev $ git merge upstream/master $ git push
Поддержка изменений аунтентификации
Однажды, Vas3k решил переделать предметную область аутентификации. Добавили возможность аутентификации на внешних сайтах с помощью OpenID... И тут заверьте - все сломалось!
После деплоя форка Клуба с интегрированными изменениями он перестал запускаться.
Ошибки в Sentry выглядели следующим образом:
InconsistentMigrationHistory Migration auth.0001_initial is applied before its dependency contenttypes.0001_initial on database 'default'.
❤️ MEOW! ❤️
https://stackoverflow.com/questions/37099564/docker-how-can-run-the-psql-command-in-the-postgres-container
https://stackoverflow.com/questions/19674456/run-postgresql-queries-from-the-command-line
https://stackoverflow.com/questions/38996599/django-manage-py-migration-applied-before-its-dependency
https://stackoverflow.com/questions/58623291/how-to-restore-database-from-dump-or-sql-file-in-docker-using-volume