Получи случайную криптовалюту за регистрацию!

Как я тестирую в проде и живу без venv Меня тут недавно захей | Dan Okhlopkov - канал

Как я тестирую в проде и живу без venv

Меня тут недавно захейтили илитные питон прогеры из Физтеховского чатика, поэтому я решил рассказать, как веду разработку на питоне.

Напоминаю, что прогать я ненавижу, но люблю то, что достигается разработкой. Поэтому я стараюсь минимизировать для себя путь между идеей и рабочим кодом на проде. Спойлер: Для меня это все делает Heroku/Dokku.

Моя модель работает идеально, когда разработчик всего один (я). Сейчас тестирую вариант с несколькими разработчиками - пока полёт отличный.

1) Я работаю с heroku-python-buildpack, который собирает и упаковывает мое приложение в докере. На вход я подаю свой код, а на выходе он понимает, как что собирать, и возвращает готовый рабочий контейнер.

2) Для того, чтобы он все сам понял, надо подготовить два файла:
requirements.txt - список библиотек, которые нужно поставить в контейнер перед тем, как запускать код. Никакие pipenv, venv, poetry не нужны - это все приблуды корпоратов. При этом я часто не фиксирую версии библиотек: если что-то поломается, то не сбилдится - я посмотрю по логам, что не так. За полтора года такой практики, такая ситуация была только один раз.
Procfile - как и что запускать. Если нужно запустить веб-сервер и воркер (например, Django и Celery) - вам сюда.

3) Как обновлённый код попадёт в ветку Master (а я напомню, что когда работаю один, я коммичу все в мастер), CI должен автоматически начать собирать новую версию приложения. Если что-то не собралось (например, из-за Runtime или поломанной библиотеки), то контейнер не соберётся, а я по логам посмотрю, в чем проблема.

4) Весь процесс «собрать новую версию приложения в контейнер», «направить трафик на новый контейнер через nginx», «погасить старый контейнер» должен быть автоматизирован (я называю это Девопс). Раньше именно на этом этапе я тратил больше всего времени.

Сам я напрямую с докером, nginx, билдпаками никак не взаимодействую. Мое - дело писать код на питоне, а остальное должно быть автоматизировано.