#flask #heroku #deployment #gunicorn
#flask #heroku #развертывание #gunicorn
Вопрос:
У меня возникли проблемы с развертыванием моего приложения flask на heroku, мое дерево каталогов выглядит так, как показано ниже:
├── app
│ ├── errors.py
│ ├── forms.py
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── models.py
│ ├── __pycache__
│ ├── routes.py
│ ├── static
│ ├── storage.db
│ └── templates
├── migrations
├── Procfile
├── README.md
├── requirements.txt
├── run.py
└── runtime.txt
$ cat runtime
python-3.8.5
$ cat Procfile
web: gunicorn: app:app
Я совсем запутался в конфигурации Procfile, должен ли я позвонить run.py (Архив, который я использую для локального вызова с помощью «flask run») или app (папка, в которой init.py вызывает экземпляр flask и экземпляр sql_alchemy)?
В любом случае, обе конфигурации вернули ошибку ниже:
$ heroku logs —хвост
heroku[web.1]: State changed from crashed to starting
heroku[web.1]: Starting process with command `gunicorn: app:app`
app[web.1]: bash: gunicorn:: command not found
heroku[web.1]: Process exited with status 127
heroku[web.1]: State changed from starting to crashed
gunicorn уже настроен на requirements.py
Комментарии:
1. Предполагая, что вы
run.py
являетесь точкой входа вашего приложения, и вы назвали свой экземпляр flask какapp
, ваш Procfile должен выглядеть следующим образомweb: gunicorn run:app
2. Спасибо @Aditya, это сработало! Почему бы вам не ответить ниже, а не просто прокомментировать? Тогда я отмечу как лучший ответ, это должно помочь другим людям 🙂
3. Добро пожаловать :). Честно говоря, я не знаю, почему я не написал это как ответ🤔. Но в любом случае я пишу это как ответ сейчас, чтобы другие люди также могли извлечь из этого пользу.
Ответ №1:
Предполагая, что вы run.py
являетесь точкой входа вашего приложения, и вы назвали свой экземпляр flask как app
, ваш Procfile должен выглядеть следующим образом:
web: gunicorn run:app
Это потому, что в вашем Procfile первым аргументом должно быть имя вашего основного файла или файла ввода, из которого вы запускаете свой веб-сайт, а вторым — имя самого вашего экземпляра flask. По крайней мере, это касается случаев с gunicorn и heroku.