Flask-Ask: как исправить ошибку «flask.debughelpers.FormDataRoutingRedirect»?

Я разрабатываю Alexa Skill с помощью Flask-Ask. Когда я проверяю свои навыки, возникает ошибка.

Я использую прокси nginx для Flask-Ask.

(Раньше на другом сервере все работало нормально.) Теперь такая же проблема на другом сервере. Поэтому я думаю, что проблема в другом, а не в коде. Я также видел ошибку мигания сообщения Flask - flask.debughelpers.FormDataRoutingRedirect, но это не решило.

Код:

from flask import Flask
from flask_ask import Ask, statement

app = Flask(__name__)
ask = Ask(app, '/')

@ask.launch
def launch():
    speech_text = "Hello!"
    return statement(speech_text).simple_card('Hello', speech_text)

if __name__ == '__main__':
    app.run(debug=True)

Вывод консоли:

127.0.0.1 - - [15/May/2019 10:41:03] "POST  HTTP/1.0" 500 -
Traceback (most recent call last):
  File "/home/user/.local/lib/python3.7/site-packages/flask/app.py", line 1997, in __call__
    return self.wsgi_app(environ, start_response)
  File "/home/user/.local/lib/python3.7/site-packages/flask/app.py", line 1985, in wsgi_app
    response = self.handle_exception(e)
  File "/home/user/.local/lib/python3.7/site-packages/flask/app.py", line 1540, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/home/user/.local/lib/python3.7/site-packages/flask/_compat.py", line 33, in reraise
    raise value
  File "/home/user/.local/lib/python3.7/site-packages/flask/app.py", line 1982, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/user/.local/lib/python3.7/site-packages/flask/app.py", line 1614, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/user/.local/lib/python3.7/site-packages/flask/app.py", line 1517, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/user/.local/lib/python3.7/site-packages/flask/_compat.py", line 33, in reraise
    raise value
  File "/home/user/.local/lib/python3.7/site-packages/flask/app.py", line 1612, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/user/.local/lib/python3.7/site-packages/flask/app.py", line 1590, in dispatch_request
    self.raise_routing_exception(req)
  File "/home/user/.local/lib/python3.7/site-packages/flask/app.py", line 1576, in raise_routing_exception
    raise FormDataRoutingRedirect(request)
flask.debughelpers.FormDataRoutingRedirect: b'A request was sent to this URL (http://127.0.0.1:5000/) but a redirect was issued automatically by the routing system to "http://127.0.0.1:5000/".  Make sure to directly send your POST-request to this URL since we can't make browsers or HTTP clients redirect with form data reliably or without user interaction.  Note: this exception is only raised in debug mode'
127.0.0.1 - - [15/May/2019 10:41:05] "POST  HTTP/1.0" 500 -
Traceback (most recent call last):
  File "/home/user/.local/lib/python3.7/site-packages/flask/app.py", line 1997, in __call__
    return self.wsgi_app(environ, start_response)
  File "/home/user/.local/lib/python3.7/site-packages/flask/app.py", line 1985, in wsgi_app
    response = self.handle_exception(e)
  File "/home/user/.local/lib/python3.7/site-packages/flask/app.py", line 1540, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/home/user/.local/lib/python3.7/site-packages/flask/_compat.py", line 33, in reraise
    raise value
  File "/home/user/.local/lib/python3.7/site-packages/flask/app.py", line 1982, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/user/.local/lib/python3.7/site-packages/flask/app.py", line 1614, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/user/.local/lib/python3.7/site-packages/flask/app.py", line 1517, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/user/.local/lib/python3.7/site-packages/flask/_compat.py", line 33, in reraise
    raise value
  File "/home/user/.local/lib/python3.7/site-packages/flask/app.py", line 1612, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/user/.local/lib/python3.7/site-packages/flask/app.py", line 1590, in dispatch_request
    self.raise_routing_exception(req)
  File "/home/user/.local/lib/python3.7/site-packages/flask/app.py", line 1576, in raise_routing_exception
    raise FormDataRoutingRedirect(request)
flask.debughelpers.FormDataRoutingRedirect: b'A request was sent to this URL (http://127.0.0.1:5000/) but a redirect was issued automatically by the routing system to "http://127.0.0.1:5000/".  Make sure to directly send your POST-request to this URL since we can't make browsers or HTTP clients redirect with form data reliably or without user interaction.  Note: this exception is only raised in debug mode'

конфиг нгинкс:

server {
    listen       80;
    server_name  mydomain.com;
    return 301 https://$host$request_uri;
}

server {
    listen       443 ssl;
    server_name  mydomain.com;

    ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem;

    location / {
        deny  all;
    }

    location /alexa {
        proxy_pass http://127.0.0.1:5000/;
    }
}

Моя среда:

  • Убунту 19.04
  • Питон 3.7.3
  • нгинкс/1.15.12

person Nerahikada    schedule 15.05.2019    source источник
comment
Какой другой сервер вы использовали ранее?   -  person Zach Valenta    schedule 15.05.2019
comment
Ubuntu 16.04, Python 3.5.2, nginx/1.14.2. Но сейчас такая же ошибка...   -  person Nerahikada    schedule 15.05.2019
comment
Можете ли вы включить конфигурацию nginx в блок кода в своем вопросе?   -  person Zach Valenta    schedule 15.05.2019
comment
хорошо, я добавил конфиг nginx.   -  person Nerahikada    schedule 15.05.2019
comment
Можете ли вы попробовать обновить proxy_pass, чтобы удалить конечный /?   -  person Zach Valenta    schedule 15.05.2019
comment
Потрясающий! Эта ошибка исчезла. Но у меня ошибка 404. (Изменить) Возможно, я решил эту ошибку.   -  person Nerahikada    schedule 15.05.2019
comment
Спасибо, @ZachValenta! Все ошибки исправлены!!!   -  person Nerahikada    schedule 15.05.2019
comment
ваше здоровье! Рад был помочь :)   -  person Zach Valenta    schedule 15.05.2019


Ответы (1)


Для решения этой проблемы...

1. Отредактируйте конфиг nginx

Удалите конечный / из proxy_pass.

Before
proxy_pass http://127.0.0.1:5000/;
After
proxy_pass http://127.0.0.1:5000;

2. Отредактируйте код Python

Он должен совпадать с конфигурацией nginx location /alexa {.

Before
ask = Ask(app, '/')
After
ask = Ask(app, '/alexa/')

3. (Вариант?) Переустановите pyOpenSSL

Если у вас такая ошибка...

AttributeError: module 'lib' has no attribute 'X509V3_EXT_get'

Переустановите pyOpenSSL. Я установил pyOpenSSL 19.0.0.

terminal
pip3 uninstall pyOpenSSL
pip3 install pyOpenSSL
person Nerahikada    schedule 15.05.2019