Приложение Python Flask невозможно развернуть на AWS Elastic Beanstalk | нет модуля с именем «приложение»

#python #amazon-web-services #flask #amazon-elastic-beanstalk

#python #amazon-web-services #flask #amazon-elastic-beanstalk

Вопрос:

Сообщение об ошибке в web.stdout.log:

 Oct 15 13:03:29 ip-172-31-18-218 web: ModuleNotFoundError: No module named 'application'
Oct 15 13:03:29 ip-172-31-18-218 web: [2020-10-15 13:03:29  0000] [4633] [INFO] Worker exiting (pid: 4633)
Oct 15 13:03:29 ip-172-31-18-218 web: [2020-10-15 13:03:29  0000] [4626] [INFO] Shutting down: Master
Oct 15 13:03:29 ip-172-31-18-218 web: [2020-10-15 13:03:29  0000] [4626] [INFO] Reason: Worker failed to boot.
  

Сообщение об ошибке в nginx / error.log

 2020/10/15 13:04:21 [error] 4559#0: *19 connect() failed (111: Connection refused) while connecting to upstream, client: 172.31.42.151, server: , request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8000/", host: "172.31.18.218"
  

Приложение Flask:

 # EB looks for an 'application' callable by default.
application = Flask(__name__)

@application.route('/')
def home(): 
    return "Hello World"

@application.route('/processImage')
def index():
    [Some Code...]

if __name__ == '__main__':
    # Setting debug to True enables debug output. This line should be
    # removed before deploying a production app.
    application.run('localhost',8000,debug=True)
  

requirements.txt

 certifi==2020.6.20
chardet==3.0.4
click==7.1.2
Flask==1.1.2
idna==2.10
itsdangerous==1.1.0
Jinja2==2.11.2
MarkupSafe==1.1.1
numpy==1.19.2
opencv-python==4.4.0.44
requests==2.24.0
urllib3==1.25.10
Werkzeug==1.0.1
    
  

Моя структура папок:

 eb-flask
  |- .vscode (folder)
  |- images (folder)
  |- application.py
  |- requirements.txt
  

Способ развертывания:

 Deployment via the Elastic Beanstalk Web UI by uploading a .zip archive of the above described folder. 
  

Любые идеи о том, как продолжить отладку или решить эту проблему, будут высоко оценены. Заранее большое спасибо.

Комментарии:

1. Попробуйте >set FLASK_APP=application.py

2. Где я должен выполнить эту настройку?

3. Запустите эту команду с помощью командной строки из своего рабочего каталога.

4. @Shradha К сожалению, это не решило проблему isse.

5. Пожалуйста, смотрите мой ответ ниже.

Ответ №1:

Я получал ту же ошибку.

Несколько вещей, которые я сделал, были:

  1. Внесено изменение: application = app = Flask(__name__) .
  2. Переименовал файл python в application.py .

Также очень важно: какие бы файлы ни требовались, выберите их и заархивируйте (щелкните правой кнопкой мыши «отправить» -> «сжатый» в Windows) и загрузите в beanstalk.

НЕ помещайте все необходимые файлы в папку и zip. Это было причиной ModuleNotFound: No Module name 'application' .

Комментарии:

1. Я согласен, способ архивирования файлов является причиной ошибки ModuleNotFound

Ответ №2:

Вы запускаете свое приложение на порту 8000. Однако EB будет ожидать его на порту 5000. Таким образом, либо вы меняете порт по умолчанию на EB, либо изменяете свое приложение для запуска на порту 5000:

 application.run('localhost', 5000,debug=True)
  

Комментарии:

1. Раньше я работал / тестировал с портом 5000, поскольку это порт flask по умолчанию. Однако журналы EB показывают, что экземпляр EC2 прослушивает порт 8000, поэтому я изменил порт. В любом случае, оба порта у меня не работали.

2. @LeonardMichalas Если вы подключитесь к экземпляру EB по ssh, сможете ли вы curl создать свое приложение изнутри? Работает ли это?

Ответ №3:

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

 import sys
import os
sys.path.append("/path_to_your_app/eb-flask")
  

Комментарии:

1. Спасибо! Поскольку я загружаю только ZIP-архив своего кода в AWS Elastic Beanstalk, я не совсем уверен, каким будет правильный путь. У вас есть какие-либо идеи по этому поводу?