Вопрос или проблема
Я изучаю курс Udacity здесь: https://classroom.udacity.com/courses/ud388/lessons/4628431284/concepts/53174719510923
Я пытаюсь запустить их программу на Python с использованием Flask. Я запустил vagrant с помощью vagrant ssh
Затем я попытался запустить этот файл Python, набрав python api_server.py
. Но когда я перехожу по адресу http://0.0.0.0:5000/
в своем браузере, я получаю:
Не найдено
Запрашиваемый URL не найден на сервере. Если вы ввели URL вручную, пожалуйста, проверьте свою запись и попробуйте еще раз.
Затем я попробовал ввести curl 'http://127.0.0.1:5000'
в vagrant, но получил ошибку
vagrant@vagrant-ubuntu-trusty-32:~$ curl 'http://127.0.0.1:5000'
curl: (7) Не удалось подключиться к 127.0.0.1 порт 5000: Соединение отклонено
Файл api_server.py приведен ниже:
#ЭТО ВЕБ-СЕРВЕР ДЛЯ ДЕМОНСТРАЦИИ ТИПОВ ОТВЕТОВ, КОТОРЫЕ МЫ ВИДИМ ОТ API ENDPOINT
from flask import Flask
app = Flask(__name__)
#GET ЗАПРОС
@app.route('/readHello')
def getRequestHello():
return "Привет, я получил ваш GET-запрос!"
#POST ЗАПРОС
@app.route('/createHello', methods = ['POST'])
def postRequestHello():
return "Я вижу, вы отправили POST сообщение :-)"
#UPDATE ЗАПРОС
@app.route('/updateHello', methods = ['PUT'])
def updateRequestHello():
return "Отправлено Привет по PUT запросу!"
#DELETE ЗАПРОС
@app.route('/deleteHello', methods = ['DELETE'])
def deleteRequestHello():
return "Удаляем ваш жесткий диск.....ха-ха, просто шучу! Я получил DELETE запрос!"
if __name__ == '__main__':
app.debug = True
app.run(host="0.0.0.0", port=5000)
В случае если вы работаете с Docker и пытаетесь подключиться из другой консоли Docker, убедитесь, что используете “Docker exec” для привязки процесса к тестированию сервиса. Я пытался подключиться с помощью “docker run”, что создавало другой экземпляр docker, и curl давал мне “соединение отклонено” для 127.0.0.1:5000.
Ответ или решение
Ошибка curl: (7) Failed to connect to 127.0.0.1 port 5000: Connection refused
указывает на то, что ваша Flask-приложение не запущено на локальном компьютере на порту 5000, к которому вы пытаетесь подключиться. Давайте разберёмся с этой проблемой шаг за шагом.
Шаги по устранению проблемы
-
Запуск сервера Flask:
Убедитесь, что ваше Flask-приложение действительно запущено. Запустите его в Vagrant с помощью команды:python api_server.py
Убедитесь, что вы видите сообщение, которое говорит о том, что сервер запущен и слушает на порту 5000.
-
Проверка URL:
Проверьте, что вы используете правильный URL. В вашем коде у вас есть только один маршрут, доступный через/readHello
. Попробуйте открыть:http://0.0.0.0:5000/readHello
или
http://127.0.0.1:5000/readHello
-
Использование правильного IP-адреса:
Обратите внимание, что, когда вы запускаете сервер Flask в Vagrant,127.0.0.1
(илиlocalhost
) ссылается на сам контейнер, а не на вашу хост-машину. Таким образом, вам может потребоваться использовать0.0.0.0
для доступа к приложению через браузер или другие инструменты, такие какcurl
. -
Проверка сети:
Если вы все еще видите ошибку "Connection refused", убедитесь, что ваше приложение слушает на правильном порту и IP-адресе. Вы можете использовать следующие команды для проверки:netstat -tuln | grep 5000
Эта команда покажет, слушает ли что-то на порту 5000. Если Flask запущен правильно, вы должны увидеть строку с указанным портом.
-
Зависания или ошибки в сервере:
Если сервер не запускается, это может быть связано с ошибками в коде. Убедитесь, что вapi_server.py
нет синтаксических ошибок и все маршруты правильно определены. -
Запуск через Docker (если применимо):
Если вы работаете с Docker, убедитесь, что вы подключаетесь к правильному контейнеру. Используйтеdocker exec
, чтобы зайти внутрь контейнера, в котором работает Flask-приложение, и используйтеcurl
там. Пример команды:docker exec -it <имя_контейнера> curl http://127.0.0.1:5000/readHello
Заключение
Если вы выполните все перечисленные шаги и все равно столкнетесь с проблемами, попробуйте дополнительно проверить журналы Flask (логирование) для нахождения возможных ошибок, которые могут указывать на причину проблемы. Вы также можете перезапустить Vagrant и заново установить все зависимости, если считаете, что что-то пошло не так в процессе настройки.
Если у вас остались вопросы или возникли другие проблемы, не стесняйтесь обращаться за помощью.