programing

처음 실행 시 플라스크: 프로덕션 환경에서 개발 서버를 사용하지 않음

skycolor 2023. 7. 11. 21:56
반응형

처음 실행 시 플라스크: 프로덕션 환경에서 개발 서버를 사용하지 않음

PyCharm Community Edition에 Flask 플러그인을 설치했는데 플라스크 앱에 다음과 같은 간단한 코드가 있습니다.

from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    return '<h1>Hello!</h1>'

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

그리고 나는 다음과 같은 메시지를 받았습니다.

WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead

* Restarting with stat
* Debugger is active!
* Debugger PIN: 123-456-789
* Running on http://127.0.0.1:5000/

플라스크를 실행할 때 이 오류가 발생하는 이유는 무엇입니까?


이전 버전의 메시지에는 "운영 환경에서 개발 서버를 사용하지 않음"이 표시되었습니다.

운영 환경에 응용 프로그램을 배포하는 경우 운영 WSGI 서버인 Waiste를 사용하는 것이 한 가지 방법입니다.

다음은 사용 예입니다.waitress암호로

from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return "<h1>Hello!</h1>"

if __name__ == "__main__":
    from waitress import serve
    serve(app, host="0.0.0.0", port=8080)

응용 프로그램 실행:

$ python hello.py

웨이트리스는 명령 줄 유틸리티도 제공합니다.waitress-serve이를 사용하기 위해 코드를 다음과 같이 수정할 수 있습니다.

from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return "<h1>Hello!</h1>"

def create_app():
   return app

그러면 우리는 사용할 수 있습니다.waitress-serve다음과 같이 표시됩니다.

waitress-serve --port=8080 --call hello:create_app

그리고 BTW, 8080이 기본 포트입니다.

배포의 유효성을 확인하려면 별도의 창을 엽니다.

% curl localhost:8080
<h1>Hello!</h1>%                     

또는 브라우저에서 직접 http://localhost:8080/.


앱을 배포할 수 있는 다른 대안으로는 Gunicorn 및 uWSGI가 있습니다.자세한 내용은 플라스크 배포 문서를 참조하십시오.

Flask 2.2 이후 개발 서버는 항상 이 경고를 표시하므로 이 경고를 비활성화할 수 없습니다.개발 서버는 프로덕션에서 사용할 수 없습니다.특별히 효율적이거나 안정적이거나 안전하도록 설계되지 않았습니다.대신 프로덕션 WSGI 서버를 사용합니다.자세한 내용은 Flask의 배포 문서를 참조하십시오.

이 경고는 경고에 불과하지만 앱 실행을 방해하는 오류는 아닙니다.앱이 작동하지 않으면 코드에 다른 문제가 있습니다.

해당 경고는 Flask 자체가 아닌 개발 서버에 적용됩니다.Flask 프레임워크는 모든 유형의 애플리케이션 및 배포에 적합합니다.

gevent 시도:

from flask import Flask
from gevent.pywsgi import WSGIServer

app = Flask(__name__)

@app.route('/api', methods=['GET'])
def index():
    return "Hello, World!"

if __name__ == '__main__':
    # Debug/Development
    # app.run(debug=True, host="0.0.0.0", port="5000")
    # Production
    http_server = WSGIServer(('', 5000), app)
    http_server.serve_forever()

참고: pip 설치 gevent를 사용하여 gevent 설치

이러한 메시지를 방지하려면 CLI(명령줄 인터페이스)에서 다음 명령을 실행합니다.

export FLASK_APP=app.py
export FLASK_ENV=development
export FLASK_DEBUG=0
flask run

일부 사람들(앞의 저와 같은)의 경우 위의 답변이 작동하지 않으면 다음과 같은 답변이 작동할 것입니다(Mac 사용자의 경우). 플라스크 실행을 수행하려면 다음 명령을 입력하십시오.

$ export FLASK_APP=hello.py
$ export FLASK_ENV=development
$ flask run

또는 다음을 수행할 수 있습니다(나는 시도해 본 적이 없지만 한 리소스 온라인 대화).

$ export FLASK_APP=hello.py
$ python -m flask run

출처: 추가 정보

이것은 창에서 효과가 있었습니다.

$env:FLASK_APP="flask_project.py"
$env:FLASK_ENV="development"
flask run

flask_project.py는 가상 환경과 동일한 경로에 있습니다.

언급URL : https://stackoverflow.com/questions/51025893/flask-at-first-run-do-not-use-the-development-server-in-a-production-environmen

반응형