Today

Поддерживаем Клуб #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)
  • Добавляем репозитарий Vas3k'а в качестве базового репозитария
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! ❤️

Links

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