Почему Flask падает в моем Docker-Compose-Project при запуске в режиме отладки? - PullRequest
0 голосов
/ 20 июня 2019

Я использую flask веб-сервер в режиме debug внутри моего docker-compose проекта.Сервер рухнет после загрузки первой страницы и застрянет в бесконечной загрузке.

По какой-то причине он работал ранее (старые добрые разработчики программного обеспечения ...).Тогда мой коллега сказал мне, что он не работает после того, как он настроил это.Я протестировал мою предыдущую сборку, которая работала, но затем решил снова извлечь из репозитория и пересобрать проект.После этого у меня возникла та же проблема, что и у него (хотя согласно git мой репозиторий был идентичен хранилищу на GitHub).

В проекте используются следующие версии для Python и Flask (из-за некоторых пакетов мыобязан использовать):

Python-версия: 2.7
Flask-версия: 0.11.1

Вот код моего runserver.py, который запускает сервер.

#!/usr/bin/env python

# This file starts the WSGI web application.
# - Heroku starts gunicorn, which loads Procfile, which starts runserver.py
# - Developers can run it from the command line: python runserver.py


from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from tornado.wsgi import WSGIContainer

from webrob.app_and_db import app, db
from webrob.pages.meshes import update_meshes
from webrob.startup.init_app import init_app


def _config_is_debug():
    # if environment variable 'EASE_DEBUG' is set to true, then
    # 'DEBUG' in app.config will be set to true by init_app.py
    return 'DEBUG' in app.config and app.config['DEBUG']


def _run_debug_server():
    print 'Run web server in DEBUG mode'
    app.run(host='0.0.0.0', debug=True, threaded=False)


def _run_server():
    http_server = HTTPServer(WSGIContainer(app))
    http_server.listen(5000)
    print 'Web server is running. Listening on {}'.format(5000)
    IOLoop.instance().start()


init_app(app, db)

# Start a development web server if executed from the command line
if __name__ == '__main__':
    update_meshes()
    if _config_is_debug():
        _run_debug_server()
    else:
        _run_server()

Примечание. Проект будет работать нормально при запуске обычного сервера (это можно сделать, установив EASE-DEBUG внутри docker-compose в false).

Проект с открытым исходным кодом, поэтому все остальные файлы можно найти в https://github.com/navidJadid/openease_webserver_development (возможно, внутри git -sub-modules).К сожалению, на данный момент весь проект должен быть готов к работе (в настоящее время я работаю над его рефакторингом из его текущего состояния).Установка немного громоздка, но описана в README.md предоставленного репозитория.

В моем журнале docker-compose появятся следующие ошибки после загрузки первой страницы из localhost:

[...]
* Debugger PIN: 250-565-638
openease         | 172.28.0.1 - - [20/Jun/2019 14:57:14] "GET /user/forgot-password HTTP/1.1" 200 -
openease         | 172.28.0.1 - - [20/Jun/2019 14:57:15] "POST /knowrob/menu HTTP/1.1" 200 -
openease         | 172.28.0.1 - - [20/Jun/2019 14:57:15] "GET /static/css/oe-logo.svg HTTP/1.1" 404 -
openease         | 172.28.0.1 - - [20/Jun/2019 14:57:15] "GET /static/HowtouseopenEASE.mp4 HTTP/1.1" 200 -
openease         | Exception in thread Thread-2:
openease         | Traceback (most recent call last):
openease         |   File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
openease         |     self.run()
openease         |   File "/usr/lib/python2.7/threading.py", line 754, in run
openease         |     self.__target(*self.__args, **self.__kwargs)
openease         |   File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 966, in inner
openease         |     srv.serve_forever()
openease         |   File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 734, in serve_forever
openease         |     HTTPServer.serve_forever(self)
openease         |   File "/usr/lib/python2.7/SocketServer.py", line 233, in serve_forever
openease         |     self._handle_request_noblock()
openease         |   File "/usr/lib/python2.7/SocketServer.py", line 292, in _handle_request_noblock
openease         |     self.handle_error(request, client_address)
openease         |   File "/usr/lib/python2.7/SocketServer.py", line 290, in _handle_request_noblock
openease         |     self.process_request(request, client_address)
openease         |   File "/usr/lib/python2.7/SocketServer.py", line 318, in process_request
openease         |     self.finish_request(request, client_address)
openease         |   File "/usr/lib/python2.7/SocketServer.py", line 331, in finish_request
openease         |     self.RequestHandlerClass(request, client_address, self)
openease         |   File "/usr/lib/python2.7/SocketServer.py", line 652, in __init__
openease         |     self.handle()
openease         |   File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 326, in handle
openease         |     rv = BaseHTTPRequestHandler.handle(self)
openease         |   File "/usr/lib/python2.7/BaseHTTPServer.py", line 340, in handle
openease         |     self.handle_one_request()
openease         |   File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 361, in handle_one_request
openease         |     return self.run_wsgi()
openease         |   File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 303, in run_wsgi
openease         |     execute(self.server.app)
openease         |   File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 294, in execute
openease         |     write(data)
openease         |   File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 275, in write
openease         |     self.wfile.write(data)
openease         | IOError: [Errno 32] Broken pipe

Мне нужен сервер для работы в режиме debug, потому что мне нужно вносить изменения в исходные файлы и не нужно перезапускать или перестраивать docker -контейнеры каждый раз, так как это займет слишком много времени,Но, как я уже упоминал, по состоянию на данный момент он падает после загрузки первой страницы.Также это работало ранее, это то, что сбивает с толку.

Я попытался запустить tornado -сервер с автозагрузкой, который тоже не работал.Также я попытался установить threading -параметр на True, но безуспешно.

Заранее спасибо ~

...