Ubuntu 14.04에서 uWSGI 및 Nginx를 사용하여 Flask 애플리케이션을 제공하는 방법의 지침에 따라 Flask 애플리케이션을 배포했습니다. 튜토리얼의 간단한 예제를 사용하면 성공적으로 배포할 수 있지만 애플리케이션의 항목 파일을 내 항목으로 바꾸면 작동하지 않습니다. 소유하고 있는데, 이상한 점은 virtualenv 환경에서 바로 사용된다는 점
으아악도 가능하지만
를 사용하세요. 으아악가 작동하지 않습니다. 오류는 다음과 같습니다.
으아악위 오류 메시지는 해당 주소가 사용되었다는 표시인데 해당 주소와 포트를 차지하는 여러 개의 주소와 포트가 열리지 않은 것입니다. 처음에는 이해가 되지 않습니다.
某草草2017-05-16 17:19:52
신중하게 조사한 끝에 마침내 문제를 해결했습니다. 먼저 항목 파일의 코드를 게시하겠습니다.
으아악uwsgi --socket 0.0.0.0:5000 --protocol=http -w wsgi
를 사용하여 직접 실행했을 때 보고되는 오류는 질문에 게시된 오류 메시지와 동일하며, 주소가 사용 중입니다. 그런데 점유된 해당 애플리케이션을 프로세스나 포트에서 찾을 수 없는 이유는 무엇입니까? 꼼꼼히 비교해봤습니다: uwsgi --socket 0.0.0.0:5000 --protocol=http -w wsgi
直接执行的时候,报的错如问题中贴的错误提示一样,地址被占用。但是进程中和端口都找不到占用的对应的应用程序,为啥简单的例子可以呢?我仔细对比了下:
#!/usr/bin/env python
# -*- coding=utf-8 -*-
from application import create_app
__author__ = 'Riky'
app = create_app('idc')
app.run()
很明显因为我在IDE中开发中习惯了,而忽略了入口文件最基础的部分:
from flask import Flask
application = Flask(__name__)
@application.route("/")
def hello():
return "<h1 style='color:blue'>Hello There!</h1>"
if __name__ == "__main__":
application.run(host='0.0.0.0')
这样错误就变成了:
#入口在没有以下代码的前提下,使用python run.py 是可以执行的
if __name__ == "__main__":
app.run(host='0.0.0.0')
而出现这个错误是一个比较让人无语的问题,uwsgi只能在入口文件识别application
,而无法识别我定义的run
。之所以会出现端口占用的情况,是因为app.run()
实际上也执行了,但并不是uwsgi要加载的应用application
으아악
을 무시했습니다. 으아악
오류는 다음과 같습니다: #🎜🎜# 으아악 #🎜🎜#이 오류의 발생은 말문이 막히는 문제입니다. uwsgi는 항목 파일의application
만 인식할 수 있고, 제가 정의한 run
은 인식할 수 없습니다. 포트가 점유되는 이유는 app.run()
이 실제로 실행되기 때문인데, uwsgi가 로드할 애플리케이션 application
이 아니기 때문입니다. #🎜🎜#
#🎜🎜#마지막으로 다음으로 변경하세요. #🎜🎜#
으아악曾经蜡笔没有小新2017-05-16 17:19:52
uwsgi에는 액세스 주소와 포트 번호를 정의할 수 있는 구성 파일이 있습니다. 제 생각엔 소켓.오류: [Errno 98] 주소 이미 사용 중 문장 오류가 uwsgi를 구성하지 않은 이유일 수 있습니다. uwsgi 구성과 플라스크 프로젝트 배포 과정은 제가 쓴 글을 참고하시면 됩니다 ㅎㅎ.
/a/1190000004294...
黄舟2017-05-16 17:19:52
netstat -ntlp 포트가 uwsgi에 의해 점유되어 있는지 확인합니다. 그렇다면 ps -ef | grep uwsgi가 pid를 찾은 다음 kill