Внутренняя ошибка сервера: тире на колбе на AWS Elastic Beanstalk - PullRequest
0 голосов
/ 22 мая 2018

NB: Dash - это пакет на python, используемый для построения панелей управления с помощью сюжета (сайт здесь ).Flask - это пакет Python, используемый для создания веб-фреймворков Python (веб-сайт здесь и учебник AWS здесь ).Я использую python 3.6, и все версии пакетов можно увидеть ниже втренинге require.txt

Проблема: Я получаю ошибку при запуске приложения Dash на моем AWS EB.

Когда я работаю локально на 127.0.0.1:8050, моя черта работает.Однако, когда я $ eb deploy получаю это на своем URL-адресе AWS:

Внутренняя ошибка сервера

Сервер обнаружил внутреннюю ошибку или неверную конфигурацию и не смогчтобы завершить запрос.

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

Подробнее об этомошибка может быть доступна в журнале ошибок сервера.

Моя файловая структура такая (где eb-flask - мой каталог фляги):

~/AWS/servers/flask-s
  |-- eb-virt                   }
  |    |-- bin                  }
  |    |-- include              } virtualenv files etc
  |    |-- lib                  }
  |    `-- pip-selfcheck.json   }
  |
  |-- eb-flask              <--- where I ran eb init
  |    |-- application.py
  |    |-- requirements.txt
  |    |-- .gitignore
  |    |-- .elasticbeanstalk
  `         `-- config.yml

При использовании $ eb config:

aws:elasticbeanstalk:container:python:
  NumProcesses: '1'
  NumThreads: '15'
  StaticFiles: /static/=static/
  WSGIPath: application.py

Мой код application.py в значительной степени извлечен из https://dash.plot.ly/deployment в качестве теста.

import flask
import os
import dash
import dash_core_components as dcc
import dash_html_components as html

#app = dash.Dash(_name_)
#server = app.server

server = flask.Flask(_name_)
application = dash.Dash(_name_, server=server)

application.css.append_css({"external_url": "https://codepen.io/chriddyp/pen/bWLwgP.css"})

application.layout = html.Div([
    html.H2('Hello World'),
    dcc.Dropdown(
        id='dropdown',
        options=[{'label': i, 'value': i} for i in ['LA', 'NYC', 'MTL']],
        value='LA'
    ),
    html.Div(id='display-value')
])

@application.callback(dash.dependencies.Output('display-value', 'children'),
              [dash.dependencies.Input('dropdown', 'value')])
def display_value(value):
return 'You have selected "{}"'.format(value)

if _name_ == '_main_':
    application.run_server(debug=True)
#app.run_server()

require.txt, очевидно, является заморозкой.На данный момент это просто необходимые пакеты для flask, dash и plotly:

certifi==2018.4.16
chardet==3.0.4
click==6.7
dash==0.21.1
dash-core-components==0.22.1
dash-html-components==0.10.1
dash-renderer==0.12.1
decorator==4.3.0
Flask==1.0.2
Flask-Compress==1.4.0
gunicorn==19.8.1
idna==2.6
ipython-genutils==0.2.0
itsdangerous==0.24
Jinja2==2.10
jsonschema==2.6.0
jupyter-core==4.4.0
MarkupSafe==1.0
nbformat==4.4.0
numpy==1.14.3
pandas==0.23.0
plotly==2.6.0
python-dateutil==2.7.3
pytz==2018.4
requests==2.18.4
six==1.11.0
traitlets==4.3.2
urllib3==1.22
Werkzeug==0.14.1

Что-то явно не на стороне сервера.Когда я запускаю (eb-virt) $ python application.py, я могу получить доступ к сайту локально.Я получаю этот ответ от HTTP GET:

(eb-virt): eb-flask $ python application.py 
 * Serving Flask app "application" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://127.0.0.1:8050/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 190-847-760
127.0.0.1 - - [22/May/2018 18:41:30] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [22/May/2018 18:41:31] "GET /_dash-layout HTTP/1.1" 200 -
127.0.0.1 - - [22/May/2018 18:41:31] "GET /_dash-dependencies HTTP/1.1" 200 -
127.0.0.1 - - [22/May/2018 18:41:31] "POST /_dash-update-component HTTP/1.1" 200 -
127.0.0.1 - - [22/May/2018 18:41:31] "GET /favicon.ico HTTP/1.1" 200 -

Тем не менее, когда я $ eb deploy, я получаю вышеупомянутую внутреннюю ошибку сервера.Я ценю любую помощь.

Когда я включаю ведение журнала , я получаю application.logger.addHandler(handler) AttributeError: 'Dash' object has no attribute 'logger' локально.При развертывании в файл журнала не добавляются ошибки, он остается пустым.

Ответы [ 2 ]

0 голосов
/ 15 июля 2019

Я думаю, что есть путаница с названием "приложение", это работало для меня: application = flask.Flask ( name )

app = dash.Dash(__name__, external_stylesheets=external_stylesheets,server=application)
0 голосов
/ 05 сентября 2018

Я думаю, проблема в том, что метод application.run_server(debug=True) имеет localhost в качестве хоста по умолчанию.Это означает, что приложение развернуто на 127.0.0.1, и вы можете получить к нему доступ только изнутри компьютера, на котором оно запущено.Это объясняет, почему вы можете получить доступ к приложению только локально (будь то с вашего компьютера или внутри экземпляра).При развертывании в Elastic Beanstalk необходимо указать хост как 0.0.0.0 - все IP-адреса (развертывание с debug=True в производстве не рекомендуется!):

if __name__ == '__main__':
    app.run_server(host="0.0.0.0")

Проверка этот пример GitHubРазвертывание приложения Flask Beanstalk.

...