apache 파이썬 - 자동으로 코드를 변경하면 Python Flask 앱이 다시로드됩니다.




함수 title (5)

나는 파이썬으로 괜찮은 웹 애플리케이션을 개발하는 방법을 조사하고있다. 고차원 구조가 길어지기를 원하지 않기 때문에, 저의 선택은 가벼운 플라스크 프레임 워크 에 떨어졌습니다. 이것이 올바른 선택인지 시간이 알 수 있습니다.

이제 mod_wsgi를 사용하여 Apache 서버를 설정 했으므로 테스트 사이트가 잘 돌아갑니다. 그러나 py 또는 템플릿 파일의 변경 사항이 사이트에 자동으로 다시로드되도록하여 개발 루틴을 빠르게 진행하고 싶습니다. 사이트의 .wsgi 파일의 변경으로 인해 (심지어 WSGIScriptReloading이 아파치 설정 파일에없는) 재로드가 발생하지만 수동으로 (즉, 추가로 linebreak를 저장하여) 저장해야합니다. 일부 응용 프로그램의 py 파일을 편집 할 때 다시로드하는 방법이 있습니까? 또는 .wsgi 파일을 새로 고치는 IDE를 사용할 것으로 예상됩니까?


Answers

만약 당신이 테스트 / dev 환경에 대해 말한다면, 디버그 옵션을 사용하십시오. 코드 변경이 발생하면 플라스크 앱이 자동으로 다시로드됩니다.

app.run(debug=True)

또는 쉘에서 :

$ export FLASK_DEBUG=1
$ flask run

http://flask.pocoo.org/docs/quickstart/#debug-mode


테스트 / 개발 환경

werkzeug 디버거에는 이미 다음 중 하나를 수행하여 활성화 할 수있는 '자동 다시로드'기능이 있습니다.

app.run(debug=True)

또는

app.debug = True

필요한 경우 별도의 구성 파일을 사용하여 모든 설정을 관리 할 수도 있습니다. 예를 들어, 'settings.py'를 'DEBUG = True'옵션과 함께 사용합니다. 이 파일을 가져 오는 것도 쉽습니다.

app.config.from_object('application.settings')

그러나 이는 프로덕션 환경에 적합하지 않습니다.

생산 환경

개인적으로 나는 약간의 성능상의 이유로 Apache + mod_wsgi를 통해 Nginx + uWSGI를 선택했지만 구성 옵션도 선택했습니다. touch-reload 옵션을 사용하면 uWSGI 응용 프로그램이 새로 배치 된 플라스크 응용 프로그램을 다시로드하게하는 파일 / 폴더를 지정할 수 있습니다.

예를 들어, 업데이트 스크립트는 가장 최근의 변경 사항을 가져와 'reload_me.txt'파일에 닿습니다. 귀하의 UWSGI ini 스크립트 (Supervisord에 의해 유지되고 있습니다 - 분명히) 어딘가에이 줄이 있습니다 :

touch-reload = '/opt/virtual_environments/application/reload_me.txt'

이게 도움이 되길 바란다!


현재 권장되는 방법 (Flask> = 0.11)은 flask 명령 행 유틸리티를 사용하는 것입니다.

http://flask.pocoo.org/docs/0.11/server/

예:

$ export FLASK_APP=main.py
$ export FLASK_DEBUG=1
$ python -m flask run

또는 하나의 명령으로 :

$ FLASK_APP=main.py FLASK_DEBUG=1 python -m flask run

나는 python -m flask run 보다 flask run python -m flask run 것이 더 좋다. 왜냐하면 전자는 또한 virtualenv 에서도 작동하기 때문이다.

기본 ( 5000 ) add --port 옵션과 다른 포트가 필요한 경우.

예:

$ python -m flask run --port 8080

더 많은 옵션을 사용할 수 있습니다 :

$ python -m flask run --help

uwsgi를 사용하여 실행중인 경우 python 자동 다시로드 옵션을 살펴보십시오.

uwsgi --py-autoreload 1

예제 uwsgi-dev-example.ini :

[uwsgi]
socket = 127.0.0.1:5000
master = true
virtualenv = /Users/xxxx/.virtualenvs/sites_env
chdir = /Users/xxx/site_root
module = site_module:register_debug_server()
callable = app
uid = myuser
chmod-socket = 660
log-date = true
workers = 1
py-autoreload = 1

site_root / __ init__.py

def register_debug_server():
    from werkzeug.debug import DebuggedApplication

    app = Flask(__name__)
    app.debug = True
    app = DebuggedApplication(app, evalex=True)
    return app

그런 다음 실행 :

uwsgi --ini uwsgi-dev-example.ini

참고 :이 예제는 디버거도 활성화합니다.

내 nginx 설치와 가능한 한 가깝게 프로덕션을 모방하기 위해이 경로를갔습니다. 단순히 nginx 뒤에 웹 서버에 내장되어있는 플라스크 응용 프로그램을 실행하면 잘못된 게이트웨이 오류가 발생합니다.


Chrome v63은 .dev 도메인을 HTTPS로 전환합니다. Internet Engineering Task Force RFC2606 은 로컬 개발에 어떤 최상위 도메인이 사용되어야 RFC2606 지정했으며 .dev는 그 목록에 없습니다.

Google은 .dev 최상위 도메인을 소유하고 사전로드 된 HSTS를 통해 모든 .dev 도메인 이름을 사이트의 HTTP 버전으로 자동 리디렉션합니다.

.dev 공식 일반 최상위 도메인 (gTLD를)되고, 우리는 더 나은 다른 솔루션 (예 : HTTPS 자체 서명 된 인증서 포함)가있는 경우에도, 뭔가 다른 .dev에서 우리의 지역 개발 접미사를 변경하고 있습니다. 따라서 .test , .example , .invalid 또는 .localhost 를 로컬 개발 TLD로 사용해야 합니다.





python apache web flask