Вы можете избежать этой головной боли при развертывании на Heroku

Развертывание проекта Django в Heroku может быть весьма поучительным опытом. То есть, если, как и я, вы предпочитаете учиться на устранении неполадок, а не просматривать всю документацию.

На прошлой неделе был один из таких учебных опытов: просмотрена файловая структура, установлены переменные окружения и обновлены зависимости проекта… вот и пришло время развертывания!

Успешное развертывание не является гарантией

Скрипт Heroku требует от вас включения в проект определенных файлов, после чего он будет следовать написанным в них инструкциям. Если вы предоставите минимум инструкций, приложение будет успешно развернуто.

Но это не значит, что приложение будет работать. Как это случилось со мной, после беспроблемного развертывания я получил страницу «Ошибка приложения».

Это правда, вы должны проверить журнал

Я боролся со своим внутренним эго и сдался… Я проверил журнал.

И было ясно... "gunicorn: command not found" указывает на то, что gunicorn не найден. Это (почти наверняка) означает, что gunicorn вообще не был установлен.

Быстрый просмотр журнала сборки и... действительно, python... ОК, pip... ОК, setuptools, wheel, SQLite3... ОК ОК ОК. Где gunicorn, psycopg2, requests… и, кстати, где сам Django?!

Свободная воля Героку

Если вы просмотрите журнал сборки, вы заметите, что ни gunicorn, ни Django никогда не устанавливались, хотя они были указаны в файле требований. Почему?

В журнале сборки говорится: «Установка зависимостей из Pipfile…». Как я узнал позже, в моем Pipfile не были обновлены зависимости, из-за чего развертывание было установлено с минимальным количеством пакетов и библиотек.

И Heroku даже не проверил файл требований, потому что он установит зависимости проекта, перечисленные в Pipfile ИЛИ в требованиях — именно в таком порядке.

Держи это подальше

Если вы привыкли развертывать приложения Django в Heroku с помощью файла требований, я советую вам оставить его таким и убедитесь, что он должным образом обновлен, как обычно.

Pipfile — это важный файл для вашей виртуальной среды разработки, но сделайте себе одолжение: не добавляйте его в репозиторий, добавив для него специальную строку в свой список gitignore, и наслаждайтесь!