2017-11-30 24 views
1

에서 uWSGI 뒤에 원격 디버그 플라스크 요청에 내가 PyCharm로 원격 디버깅을 수행하는 방법에 대한 온라인 어떤 문서를 읽은 방법 - https://www.jetbrains.com/help/pycharm/remote-debugging.htmlPyCharm

을하지만 하나의 중요한 문제가 있었다 내가 할 노력했다, 내 설정 - Nginx는 내 Flask 앱에 연결되는 uWSGI에 연결합니다. 잘 모르겠지만,

import sys 
sys.path.append('pycharm-debug.egg') 

import pydevd 

pydevd.settrace('localhost', port=11211, 
       stdoutToServer=True, stderrToServer=True, 
       suspend=False) 
print 'connected' 

from wsgi_configuration_module import app 

wsgi_configuration_module.py 파일 즉 디버그 생산에 사용되는 uWSGI 파일입니다, 같은 것을 설정.

디버거를 uWSGI 시작/재로드시 한 번만 실행되는 uWSGI의 주/마스터 프로세스에 연결합니다. 그러나 요청의 코드 블록에 중단 점을 설정하려고하면 건너 뛰거나 건너 뛰지 말고 uWSGI는 시간 초과 후 게이트웨이 오류를 표시합니다.

답변

1

여기까지의 문제는 디버거가 정확하게 응용 프로그램 프로세스 인 uWSGI/이 아니며 개별 요청 프로세스 중 하나 인입니다.

내 상황에서이 문제를 해결하려면 2 가지가 변경되어야합니다. 그 중 하나는 내 앱의 uWSGI 구성입니다. 우리의 생산 파일이 여기

[uwsgi] 
... 
master = true 
enable-threads = true 
processes = 5 

그러나, 같은 디버거를 제공합니다 (우리를) 요청 프로세스에 연결하는 쉬운 시간 및 연결 상태를 유지 보인다, 우리는

[uwsgi] 
... 
master = true 
enable-threads = false 
processes = 1 

만들기로 변경 스레드를 사용하지 않도록 설정하고 프로세스를 1 개로 제한하십시오. http://uwsgi-docs.readthedocs.io/en/latest/Options.html

그런 다음 시작 파이썬 파일에서 전체 플라스크 응용 프로그램이 시작될 때 연결하도록 디버거를 설정하는 대신 함수에 연결하도록 설정합니다 편리한 플라스크 푸로 장식 nction, before_first_requesthttp://flask.pocoo.org/docs/0.12/api/#flask.Flask.before_first_request, 시작 스크립트 같은 뭔가 변화, 그래서

import sys 
import wsgi_configuration_module 

sys.path.append('pycharm-debug.egg') 
import pydevd 

app = wsgi_configuration_module.app 


@app.before_first_request 
def before_first_request(): 
    pydevd.settrace('localhost', port=11211, 
        stdoutToServer=True, stderrToServer=True, 
        suspend=False) 
    print 'connected' 

# 

그래서 지금, 당신이 그들과 디버거 어떤 호환 문제의 가능성을 제한 할 스레드로 제한 uWSGI을했습니다, 만 1 과정, 첫 번째 요청 전에 만 연결하도록 pydevd을 설정하십시오. 이제 디버거는이 함수의 첫 번째 요청에서 '연결됨'을 한 번만 인쇄하고 나중의 중단 점은 모든 요청 끝점 함수에 아무런 문제없이 연결합니다.