#python #azure #gunicorn #azure-web-app-service #flask-socketio
#python #azure #gunicorn #azure-web-app-service #flask-socketio
Вопрос:
Я пытаюсь развернуть приложение Flask с помощью Gunicorn на Azure. Мое приложение отлично работает на localhost и даже на Heroku, но когда я пытаюсь развернуть его в веб-приложении Azure, оно не создается и показывает: Ошибка с модулем неоснования: нет модуля с именем ‘flask_socketio’. Я установил виртуальную среду и правильно установил все пакеты перед развертыванием в Azure. Я использую Azure-CLI для развертывания приложения. Я уже включил опцию веб-сокета в конфигурации и запустил свое приложение на Python 3.8. Для целей тестирования я развернул приложение Smiple Flask, оно успешно развернуто и запущено.
Ссылка Github на мой проект: FlaskWebcam
Журнал ошибок:
Starting Live Log Stream ---
2020-09-13T19:56:18.960Z INFO - Starting container for site
2020-09-13T19:56:18.963Z INFO - docker run -d -p 9708:8000 --name inverseflask_0_16637254 -e WEBSITE_SITE_NAME=InverseFlask -e WEBSITE_AUTH_ENABLED=False -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=inverseflask.azurewebsites.net -e WEBSITE_INSTANCE_ID=26433a6b0a3346c389469a9d486d0892e34237dd74d5333601dda5fe35c941b8 -e HTTP_LOGGING_ENABLED=1 appsvc/python:3.8_20200707.6
2020-09-13T19:56:22.884Z INFO - Initiating warmup request to container inverseflask_0_16637254 for site inverseflask
2020-09-13T19:56:38.900Z INFO - Waiting for response to warmup request for container inverseflask_0_16637254. Elapsed time = 16.0166497 sec
2020-09-13T19:56:21.995899368Z
2020-09-13T19:56:21.995956370Z _____
2020-09-13T19:56:21.995966670Z / _ __________ _________ ____
2020-09-13T19:56:21.995974271Z / /_ ___ / | _ __ _/ __
2020-09-13T19:56:21.995981571Z / | / /| | /| | / ___/
2020-09-13T19:56:21.995988971Z ____|__ /_____ ____/ |__| ___ >
2020-09-13T19:56:21.995996371Z / / /
2020-09-13T19:56:22.001078169Z
2020-09-13T19:56:22.001105870Z A P P S E R V I C E O N L I N U X
2020-09-13T19:56:22.001114471Z
2020-09-13T19:56:22.001121571Z Documentation: http://aka.ms/webapp-linux
2020-09-13T19:56:22.001128571Z Python 3.8.3
2020-09-13T19:56:22.001251176Z Note: Any data outside '/home' is not persisted
2020-09-13T19:56:22.182082317Z Starting OpenBSD Secure Shell server: sshd.
2020-09-13T19:56:22.229719372Z App Command Line not configured, will attempt auto-detect
2020-09-13T19:56:22.230599206Z Launching oryx with: create-script -appPath /home/site/wwwroot -output /opt/startup/startup.sh -virtualEnvName antenv -defaultApp /opt/defaultsite
2020-09-13T19:56:22.323448922Z Found build manifest file at '/home/site/wwwroot/oryx-manifest.toml'. Deserializing it...
2020-09-13T19:56:22.329158744Z Build Operation ID: |Y6gr/BhPUcQ=.36185211_
2020-09-13T19:56:22.330353391Z Oryx Version: 0.2.20200706.2, Commit: 42be45d884938c3c818ba08e9e4760b1136fd9b3, ReleaseTagName: 20200706.2
2020-09-13T19:56:23.087122158Z Detected an app based on Flask
2020-09-13T19:56:23.344716588Z Generating `gunicorn` command for 'application:app'
2020-09-13T19:56:23.837293868Z Writing output script to '/opt/startup/startup.sh'
2020-09-13T19:56:24.399410856Z Found virtual environment .tar.gz archive.
2020-09-13T19:56:24.400232088Z Removing existing virtual environment directory /antenv...
2020-09-13T19:56:24.419407435Z Extracting to directory /antenv...
2020-09-13T19:56:46.138875734Z Using packages from virtual environment antenv located at /antenv.
2020-09-13T19:56:46.145147100Z Updated PYTHONPATH to ':/antenv/lib/python3.8/site-packages'
2020-09-13T19:56:48.737945237Z [2020-09-13 19:56:48 0000] [41] [INFO] Starting gunicorn 20.0.4
2020-09-13T19:56:48.742939236Z [2020-09-13 19:56:48 0000] [41] [INFO] Listening at: http://0.0.0.0:8000 (41)
2020-09-13T19:56:48.743827471Z [2020-09-13 19:56:48 0000] [41] [INFO] Using worker: sync
2020-09-13T19:56:48.756394071Z [2020-09-13 19:56:48 0000] [43] [INFO] Booting worker with pid: 43
2020-09-13T19:56:49.372391696Z [2020-09-13 19:56:49 0000] [43] [ERROR] Exception in worker process
2020-09-13T19:56:49.372452399Z Traceback (most recent call last):
2020-09-13T19:56:49.372464099Z File "/opt/python/3.8.3/lib/python3.8/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
2020-09-13T19:56:49.372502201Z worker.init_process()
2020-09-13T19:56:49.372511001Z File "/opt/python/3.8.3/lib/python3.8/site-packages/gunicorn/workers/base.py", line 119, in init_process
2020-09-13T19:56:49.372518901Z self.load_wsgi()
2020-09-13T19:56:49.372526102Z File "/opt/python/3.8.3/lib/python3.8/site-packages/gunicorn/workers/base.py", line 144, in load_wsgi
2020-09-13T19:56:49.372533802Z self.wsgi = self.app.wsgi()
2020-09-13T19:56:49.372540902Z File "/opt/python/3.8.3/lib/python3.8/site-packages/gunicorn/app/base.py", line 67, in wsgi
2020-09-13T19:56:49.372548402Z self.callable = self.load()
2020-09-13T19:56:49.372555403Z File "/opt/python/3.8.3/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 49, in load
2020-09-13T19:56:49.372563003Z return self.load_wsgiapp()
2020-09-13T19:56:49.372570103Z File "/opt/python/3.8.3/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 39, in load_wsgiapp
2020-09-13T19:56:49.372577604Z return util.import_app(self.app_uri)
2020-09-13T19:56:49.372584604Z File "/opt/python/3.8.3/lib/python3.8/site-packages/gunicorn/util.py", line 358, in import_app
2020-09-13T19:56:49.372591904Z mod = importlib.import_module(module)
2020-09-13T19:56:49.372598904Z File "/opt/python/3.8.3/lib/python3.8/importlib/__init__.py", line 127, in import_module
2020-09-13T19:56:49.372606505Z return _bootstrap._gcd_import(name[level:], package, level)
2020-09-13T19:56:49.372613605Z File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
2020-09-13T19:56:49.372622005Z File "<frozen importlib._bootstrap>", line 991, in _find_and_load
2020-09-13T19:56:49.372629606Z File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
2020-09-13T19:56:49.372637306Z File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
2020-09-13T19:56:49.372644706Z File "<frozen importlib._bootstrap_external>", line 783, in exec_module
2020-09-13T19:56:49.372652207Z File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
2020-09-13T19:56:49.372659707Z File "/home/site/wwwroot/application.py", line 4, in <module>
2020-09-13T19:56:49.372667207Z from flask_socketio import SocketIO
2020-09-13T19:56:49.372674407Z ModuleNotFoundError: No module named 'flask_socketio'
2020-09-13T19:56:49.380001099Z [2020-09-13 19:56:49 0000] [43] [INFO] Worker exiting (pid: 43)
2020-09-13T19:56:49.465561206Z [2020-09-13 19:56:49 0000] [41] [INFO] Shutting down: Master
2020-09-13T19:56:49.466915059Z [2020-09-13 19:56:49 0000] [41] [INFO] Reason: Worker failed to boot.
2020-09-13T19:56:54.880Z ERROR - Container inverseflask_0_16637254 for site inverseflask has exited, failing site start
2020-09-13T19:56:54.893Z ERROR - Container inverseflask_0_16637254 didn't respond to HTTP pings on port: 8000, failing site start. See container logs for debugging.
2020-09-13T19:56:54.903Z INFO - Stopping site inverseflask because it failed during startup.
Ответ №1:
Из вашего описания кажется, что вы уже установили этот модуль, но я хочу знать, как вы его развертываете? При обычных обстоятельствах нам нужен файл с именем requirements.txt для установки зависимых пакетов. Устанавливать его локально бесполезно. Это также должно быть указано в requirements.txt и затем развернут.
Взгляните на это:
https://learn.microsoft.com/en-us/azure/devops/pipelines/ecosystems/python-webapp?view=azure-devops
Комментарии:
1. У меня есть requirements.txt и я использовал вышеуказанный способ, все еще он показывает ошибку приложения.
Ответ №2:
Как бы то ни было, я пытаюсь сделать что-то очень похожее. Похоже, что мне удалось установить flask_socketio в веб-приложении. Я в основном следовал этому руководству: Создайте приложение Python в службе приложений Azure в Linux. Сказав это, я сначала включил эту строку в свой requirements.txt : flask_socketio == 4.3.1, но я получил вашу ошибку. Затем я установил его в свою локальную виртуальную среду python (pip install flask_socketio == 4.3.1), и после повторного развертывания это, казалось, исправило ошибку.
Тем не менее, я все еще получаю ошибку. На вкладке сети браузера я вижу, например: index.js:83 POST https://.azurewebsites.net/socket.io/?EIO=3amp;transport=pollingamp;t=NITSD38amp;sid=0439a49c525247a79bf2b80792ba2636 400 (НЕВЕРНЫЙ ЗАПРОС)