Что найти?

Развертывание приложения Flask на Heroku

/
/

В этом руководстве вы узнаете, как развернуть приложение Flask на Heroku в Python. Приложение может быть таким же простым, как приложение «Hello World» для платформы мониторинга социальных сетей!

В настоящее время нет бизнеса, у которого нет веб-приложения, которое помогло бы ему охватить большую аудиторию, или, возможно, предоставило бы свои услуги через онлайн-портал.

Сегодня вы узнаете, как создать API, используя Flask в качестве примера развертывания вашего приложения на Heroku.

Создание REST API с помощью Flask

В каталоге вашего проекта давайте начнем с создания virtualenv:

$ python -m venv venv/

И активируем его исходной командой:

$ source venv/bin/activate

Затем давайте используем pip для установки библиотек, которые мы собираемся использовать – flask для создания приложения и gunicorn в качестве нашего сервера:

$ pip install flask
$ pip install gunicorn

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

# app.py
from flask import Flask, request, jsonify
app = Flask(__name__)

@app.route('/getmsg/', methods=['GET'])
def respond():
    # Retrieve the name from url parameter
    name = request.args.get("name", None)

    # For debugging
    print(f"got name {name}")

    response = {}

    # Check if user sent a name at all
    if not name:
        response["ERROR"] = "no name found, please send a name."
    # Check if the user entered a number not a name
    elif str(name).isdigit():
        response["ERROR"] = "name can't be numeric."
    # Now the user entered a valid name
    else:
        response["MESSAGE"] = f"Welcome {name} to our awesome platform!!"

    # Return the response in json format
    return jsonify(response)

@app.route('/post/', methods=['POST'])
def post_something():
    param = request.form.get('name')
    print(param)
    # You can add the test cases you made in the previous function, but in our case here you are just testing the POST functionality
    if param:
        return jsonify({
            "Message": f"Welcome {name} to our awesome platform!!",
            # Add this option to distinct the POST request
            "METHOD" : "POST"
        })
    else:
        return jsonify({
            "ERROR": "no name found, please send a name."
        })

# A welcome message to test our server
@app.route('/')
def index():
    return "<h1>Welcome to our server !!</h1>"

if __name__ == '__main__':
    # Threaded option to enable multiple instances for multiple user access support
    app.run(threaded=True, port=5000)

Чтобы протестировать ваше приложение локально, давайте перейдем к конечной точке http://127.0.0.1:5000/. Если все в порядке, нас должно приветствовать приветственное сообщение:

Приветственное сообщение

Мы также можем отправить имя в качестве параметра, например http://localhost:5000/getmsg/?Name=Mark:

{"MESSAGE":"Welcome Mark to our awesome platform!!"}

Когда наше приложение готово, давайте развернем его на Heroku.

Что такое Heroku?

Heroku – одна из первых облачных платформ как сервис (PaaS), поддерживающая несколько языков – Ruby, Java, Node.js, Scala, Clojure, Python, PHP и Go.

Первое, что нам нужно сделать, это определить, какие библиотеки использует наше приложение. Таким образом, Heroku знает, какие из них предоставить нам, подобно тому, как мы устанавливаем их локально при разработке приложения.

Для этого нам нужно создать файл requirements.txt со всеми модулями:

$ pip freeze > requirements.txt

Таким образом, мы получаем файл requirements.txt, содержащий библиотеки, которые мы используем, и их версии:

Click==7.0
Flask==1.1.1
gunicorn==19.9.0
itsdangerous==1.1.0
Jinja2==2.10.1
MarkupSafe==1.1.1
Werkzeug==0.15.6

Примечание. Одна из распространенных ошибок – это орфографические ошибки. Это настоящая боль, когда вы часами отлаживаете свой код и обнаруживаете, что приложение не запускается, потому что сервер не загрузил модули. Единственный способ узнать используемые вами модули для Heroku – это добавить их в файл requirements.txt, так что будьте осторожны!

Чтобы Heroku мог запускать наше приложение, как должно, нам нужно заранее определить набор процессов или команд, которые оно должно запускать. Эти команды находятся в Procfile:

web: gunicorn app:app

Веб-команда сообщает Heroku о необходимости запустить веб-сервер для приложения, используя gunicorn. Поскольку наше приложение называется app.py, мы также установили имя приложения как app.

Создание аккаунта

Теперь мы должны создать учетную запись Heroku.

Как только это будет решено, на панели инструментов выберите New -> Create new app:

Аккаунт Heroku

Выберите имя для приложения и регион, в котором вы хотите разместить его:

Выбор имени для приложения и региона

Как только приложение будет создано на Heroku, мы готовы развернуть его в Интернете.

Git

Чтобы загрузить наш код, мы воспользуемся Git. Для начала создадим репозиторий git:

$ git init .

А теперь давайте добавим наши файлы и зафиксируем:

$ git add app.py Procfile requirements.txt
$ git commit -m "first commit"

Развертывание приложения

Чтобы окончательно развернуть приложение, нам нужно установить Heroku CLI, с помощью которого мы будем запускать команды. Давайте войдем в нашу учетную запись, используя наши учетные данные, выполнив команду:

$ heroku login -i

В качестве альтернативы мы можем войти в систему с помощью браузера, если запустим команду:

$ heroku login

На этом этапе, войдя в систему, мы должны добавить наш репозиторий в удаленный:

$ heroku git:remote -a {your-project-name}

Обязательно замените {your-project-name} фактическим названием вашего проекта, которое вы выбрали на предыдущем шаге.

После этого давайте загрузим проект, отправив его в Heroku:

$ git push heroku master

На вашем терминале должен появиться длинный журнал прогресса, заканчивающийся:

...
remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote:
remote: -----> Compressing...
remote:        Done: 45.1M
remote: -----> Launching...
remote:        Released v4
remote:        https://{your-project-name}.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/{your-project-name}.git
   ae85864..4e63b46  master -> master

Поздравляем, вы успешно загрузили свое первое веб-приложение на Heroku. Пришло время протестировать и проверить наш API.

Тестирование API

В журнале, который был показан в консоли, вы найдете ссылку для своего приложения https://{your-project-name}.herokuapp.com/, эту ссылку также можно найти на вкладке «Настройки» в разделах «Домены» и раздел сертификатов:

Тестирование API

Перейдя по ссылке, мы можем перейти к нашему приложению, которое теперь онлайн и общедоступно:

Переход к приложению

В случае возникновения ошибок вы можете получить доступ к журналам и устранить неполадки оттуда:

Доступ к журналам

Вы можете вручную протестировать свое приложение в браузере, введя URL-адрес и добавив путь для /getmsg/route. Поскольку приложения становятся все более сложными, рекомендуется использовать такие инструменты, как Postman.

Теперь давайте протестируем GET-запрос к нашему приложению с параметром имени:

Тестирование GET-запроса

Теперь давайте протестируем URL-адрес, который не привязан к какой-либо функции, например, /newurl, с помощью запроса GET:

Тестирование URL-адреса

Как и ожидалось, наше приложение Flask вернуло ответ 404.

Примечание. Вы можете изменить вид вывода из Pretty, Raw и Preview, который показывает, как вывод будет выглядеть в вашем браузере.

Теперь протестируем POST-запрос:

Тестирование POST-запроса

Также посмотрим, что произойдет, если мы полностью опустим параметр name:

{"ERROR":"no name found, please send a name."}

Мы протестировали наше приложение и подтвердили, что все работает нормально. Чтобы увидеть историю вашего сервера и какие запросы были сделаны, вы можете проверить logs вашего сайта через Heroku:

Проверка logs сайта через Heroku

Вы можете увидеть здесь POST-запрос, который мы отправили на нашу страницу /post/.

Также вы можете увидеть историю создания приложения. Более того, если во время сборки возникнут какие-либо проблемы, вы можете найти их на странице журнала.

Заключение

В этой статье мы показали простой пример создания нашего первого простого API на Heroku с использованием микросхемы Flask. Процесс разработки остается прежним, пока вы продолжаете создавать свое приложение.

Heroku предлагает бесплатный и студенческий план. Бесплатный план ограничен, но он неплохо работает, например, для начального приложения, POC или простого проекта.

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

This div height required for enabling the sticky sidebar