Ошибка сегментации uWSGI при использовании Flask -ReCaptcha - PullRequest
0 голосов
/ 29 января 2020

У меня проблема с использованием функции Flask -ReCaptcha на моем сервере (Ubuntu 18.04.2 LTS). На моей локальной машине все работает просто отлично, но когда я запускаю тот же проект на сервере, он проваливается при проверке ReCaptcha, сразу после того, как я ставлю галочку.

Журналы:

[36mantifraud-dashboard_1           | [0m 2020-01-27 12:03:35,761 INFO success: nginx entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
[36mantifraud-dashboard_1           | [0m 2020-01-27 12:03:35,761 INFO success: uwsgi entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
[36mantifraud-dashboard_1           | [0m [pid: 17|app: 0|req: 1/1] 10.10.0.4 () {50 vars in 888 bytes} [Mon Jan 27 12:03:48 2020] GET / => generated 219 bytes in 13 msecs (HTTP/1.0 302) 3 headers in 140 bytes (1 switches on core 0)
[36mantifraud-dashboard_1           | [0m 10.10.0.4 - - [27/Jan/2020:12:03:48 +0000] "GET / HTTP/1.0" 302 219 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36" "111.111.111.111"
[36mantifraud-dashboard_1           | [0m 10.10.0.4 - - [27/Jan/2020:12:03:48 +0000] "GET /login HTTP/1.0" 200 1441 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36" "111.111.111.111"
[36mantifraud-dashboard_1           | [0m [pid: 16|app: 0|req: 1/2] 10.10.0.4 () {48 vars in 873 bytes} [Mon Jan 27 12:03:48 2020] GET /login => generated 1441 bytes in 29 msecs (HTTP/1.0 200) 2 headers in 81 bytes (1 switches on core 0)
[36mantifraud-dashboard_1           | [0m !!! uWSGI process 16 got Segmentation Fault !!!
[36mantifraud-dashboard_1           | [0m 10.10.0.4 - - [27/Jan/2020:12:03:59 +0000] "POST /login HTTP/1.0" 502 559 "https://dashboard.antifraud.kektaxi.app/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36" "111.111.111.111"
[36mantifraud-dashboard_1           | [0m 2020/01/27 12:03:59 [error] 11#11: *5 upstream prematurely closed connection while reading response header from upstream, client: 10.10.0.4, server: , request: "POST /login HTTP/1.0", upstream: "uwsgi://unix:///tmp/uwsgi.sock:", host: "dashboard.antifraud.kektaxi.app", referrer: "https://dashboard.antifraud.kektaxi.app/login"
[36mantifraud-dashboard_1           | [0m DAMN ! worker 1 (pid: 16) died, killed by signal 11 :( trying respawn ...
[36mantifraud-dashboard_1           | [0m Respawned uWSGI worker 1 (new pid: 18)

Я использую Python 3.7 как на сервере, так и на локальной машине. Список установленных библиотек:

bcrypt==3.1.7
certifi==2019.11.28
cffi==1.13.2
chardet==3.0.4
Click==7.0
dnspython==1.16.0
Flask==1.1.1
Flask-Bcrypt==0.7.1
Flask-Login==0.4.1
Flask-ReCaptcha==0.4.2
idna==2.8
itsdangerous==1.1.0
Jinja2==2.10.3
MarkupSafe==1.1.1
mysql-connector-python==8.0.19
protobuf==3.6.1
pycparser==2.19
PyYAML==5.3
requests==2.22.0
six==1.13.0
urllib3==1.25.8
Werkzeug==0.16.0

uwsgi.ini

[uwsgi]
module = antifraud_dashboard
callable = app

Dockerfile

FROM tiangolo/uwsgi-nginx-flask:python3.7

VOLUME /app

WORKDIR /app

COPY requirements.txt .

RUN echo "uwsgi_read_timeout 600s;" > /etc/nginx/conf.d/custom_timeout.conf

RUN pip install -r requirements.txt

Обновление:

UWSGI_LAZY_APPS=1, похоже, не имеет эффект, но после установки PYTHONFAULTHANDLER =1 я получил следующую трассировку:

antifraud-dashboard_1           | Fatal Python error: Segmentation fault
antifraud-dashboard_1           |
antifraud-dashboard_1           | Current thread 0x00007f3bb4296780 (most recent call first):
antifraud-dashboard_1           |   File "/usr/local/lib/python3.7/socket.py", line 748 in getaddrinfo
antifraud-dashboard_1           |   File "/usr/local/lib/python3.7/site-packages/urllib3/util/connection.py", line 61 in create_connection
antifraud-dashboard_1           |   File "/usr/local/lib/python3.7/site-packages/urllib3/connection.py", line 157 in _new_conn
antifraud-dashboard_1           |   File "/usr/local/lib/python3.7/site-packages/urllib3/connection.py", line 300 in connect
antifraud-dashboard_1           |   File "/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py", line 994 in _validate_conn
antifraud-dashboard_1           |   File "/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py", line 376 in _make_request
antifraud-dashboard_1           |   File "/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py", line 672 in urlopen
antifraud-dashboard_1           |   File "/usr/local/lib/python3.7/site-packages/requests/adapters.py", line 449 in send
antifraud-dashboard_1           |   File "/usr/local/lib/python3.7/site-packages/requests/sessions.py", line 646 in send
antifraud-dashboard_1           |   File "/usr/local/lib/python3.7/site-packages/requests/sessions.py", line 533 in request
antifraud-dashboard_1           |   File "/usr/local/lib/python3.7/site-packages/requests/api.py", line 60 in request
antifraud-dashboard_1           |   File "/usr/local/lib/python3.7/site-packages/requests/api.py", line 75 in get
antifraud-dashboard_1           |   File "/usr/local/lib/python3.7/site-packages/flask_recaptcha.py", line 80 in verify
antifraud-dashboard_1           |   File "./antifraud_dashboard.py", line 94 in login_user
antifraud-dashboard_1           |   File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1935 in dispatch_request
antifraud-dashboard_1           |   File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1949 in full_dispatch_request
antifraud-dashboard_1           |   File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 2446 in wsgi_app
antifraud-dashboard_1           |   File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 2463 in __call__

1 Ответ

0 голосов
/ 29 января 2020
  1. Задайте для переменной среды PYTHONFAULTHANDLER что-либо, например, 1, и вы можете получить обратную трассировку (https://pythonspeed.com/articles/python-c-extension-crashes/)

  2. У uWSGI есть некоторые плохие значения по умолчанию, достаточно плохие, которые я лично рекомендую не использовать из-за этого, но если вы должны: установите UWSGI_LAZY_APPS env variable в 1. По умолчанию uWSGI делает fork () - без-exe c (), что является рецептом для сбоев и таинственных ошибок. Может не быть проблемой в этом случае, но все же вещь, которую нужно установить.

...