我已经使用Gunicorn + Nginx + Supervisor部署了一个Flask应用程序。它不起作用。 在线搜索发现了几个类似问题的报告,但没有一个解释符合我们的情况或解决问题的解决方案。 Here说要关掉daemonize gunicorn。如果我是对的,那不是我的情况。
似乎有些东西启动了一个已经监听8000端口的服务。 Supervisor每秒都会向日志文件发送错误。
什么可以帮助我?
Supervisor app-stderr.log中的错误:
[2015-02-19 18:56:19 +0300] [964] [INFO] Starting gunicorn 19.2.1
[2015-02-19 18:56:19 +0300] [964] [INFO] Listening at: http://127.0.0.1:8000 (964)
[2015-02-19 18:56:19 +0300] [964] [INFO] Using worker: sync
[2015-02-19 18:56:19 +0300] [1078] [INFO] Booting worker with pid: 1078
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
[2015-02-19 18:56:20 +0300] [1081] [INFO] Starting gunicorn 19.2.1
[2015-02-19 18:56:20 +0300] [1081] [ERROR] Connection in use: ('localhost', 8000)
[2015-02-19 18:56:20 +0300] [1081] [ERROR] Retrying in 1 second.
[2015-02-19 18:56:21 +0300] [1081] [ERROR] Connection in use: ('localhost', 8000)
[2015-02-19 18:56:21 +0300] [1081] [ERROR] Retrying in 1 second.
[2015-02-19 18:56:22 +0300] [1081] [ERROR] Connection in use: ('localhost', 8000)
[2015-02-19 18:56:22 +0300] [1081] [ERROR] Retrying in 1 second.
[2015-02-19 18:56:23 +0300] [1081] [ERROR] Connection in use: ('localhost', 8000)
[2015-02-19 18:56:23 +0300] [1081] [ERROR] Retrying in 1 second.
[2015-02-19 18:56:24 +0300] [1081] [ERROR] Connection in use: ('localhost', 8000)
[2015-02-19 18:56:24 +0300] [1081] [ERROR] Retrying in 1 second.
[2015-02-19 18:56:25 +0300] [1081] [ERROR] Can't connect to ('localhost', 8000)
[2015-02-19 18:56:25 +0300] [1078] [INFO] Worker exiting (pid: 1078)
[2015-02-19 18:56:25 +0300] [1122] [INFO] Booting worker with pid: 1122
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
[2015-02-19 18:56:27 +0300] [1148] [INFO] Starting gunicorn 19.2.1
[2015-02-19 18:56:27 +0300] [1148] [ERROR] Connection in use: ('localhost', 8000)
[2015-02-19 18:56:27 +0300] [1148] [ERROR] Retrying in 1 second.
[2015-02-19 18:56:28 +0300] [1148] [ERROR] Connection in use: ('localhost', 8000)
[2015-02-19 18:56:28 +0300] [1148] [ERROR] Retrying in 1 second.
[2015-02-19 18:56:29 +0300] [1148] [ERROR] Connection in use: ('localhost', 8000)
[2015-02-19 18:56:29 +0300] [1148] [ERROR] Retrying in 1 second.
[2015-02-19 18:56:30 +0300] [1148] [ERROR] Connection in use: ('localhost', 8000)
[2015-02-19 18:56:30 +0300] [1148] [ERROR] Retrying in 1 second.
[2015-02-19 18:56:31 +0300] [1148] [ERROR] Connection in use: ('localhost', 8000)
[2015-02-19 18:56:31 +0300] [1148] [ERROR] Retrying in 1 second.
[2015-02-19 18:56:32 +0300] [1148] [ERROR] Can't connect to ('localhost', 8000)
[2015-02-19 18:56:32 +0300] [1122] [INFO] Worker exiting (pid: 1122)
[2015-02-19 18:56:32 +0300] [1206] [INFO] Booting worker with pid: 1206
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
[2015-02-19 18:56:32 +0300] [1211] [INFO] Starting gunicorn 19.2.1
[2015-02-19 18:56:32 +0300] [1211] [ERROR] Connection in use: ('localhost', 8000)
我的supervisor.conf:
[program:app]
command = /home/www/app/flask/bin/gunicorn app:app -b localhost:8000 --preload
directory = /home/www/app
user = webhost
Netstat -tulpin
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 930/nginx
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 855/sshd
tcp 0 0 127.0.0.1:8000 0.0.0.0:* LISTEN 1392/python3
tcp6 0 0 :::22 :::* LISTEN 855/sshd
和ps aux | grep python
root 954 0.1 2.4 60564 12440 ? Ss 18:56 0:01 /usr/bin/python /usr/bin/supervisord -c /etc/supervisor/supervisord.conf
webhost 1392 0.0 3.2 67148 16512 ? S 19:00 0:00 /home/www/app/flask/bin/python3 /home/www/app/flask/bin/gunicorn app:app -b localhost:8000
webhost 2124 5.2 4.2 86072 21344 ? S 19:12 0:00 /home/www/app/flask/bin/python3 /home/www/app/flask/bin/gunicorn app:app -b localhost:8000
webhost 2126 5.2 3.2 67148 16488 ? S 19:12 0:00 /home/www/app/flask/bin/python3 /home/www/app/flask/bin/gunicorn app:app -b localhost:8000
webhost 2130 0.0 0.1 11744 920 pts/0 S+ 19:13 0:00 grep --color=auto python
UPD。 主管配置在上面
nginx.conf
server {
location / {
proxy_pass http://127.0.0.1:8000;
}
location /static {
alias /home/www/myapp/app/static/;
}
}
文件结构
myapp
|
|-app-
| |
| __init__.py
|
run.py
|
config.py
__初始化__。PY
from flask import Flask
app = Flask(__name__)
app.config.from_object('config')
from app import views
run.py
#!flask/bin/python
from app import app
app.run()
config.py
# For valid forms
CSRF_ENABLED = True
SECRET_KEY = 'never-guess'
答案 0 :(得分:3)
run.py
中通过gunicorn创建了一个应用程序
#!flask/bin/python
from app import app
app.run()
所以gunicorn也创造了流程和app.run()
。
他们互相冲突。
刚刚删除了那个字符串。
答案 1 :(得分:1)
我有同样的问题,并且通过调整Alwx的答案,我的解决方案是只运行应用程序,如果模块被称为main(run.py):
from my_app import create_app
app = create_app()
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080, debug=True)
然后我用gunicorn运行它:
gunicorn run:app
我仍然可以像以前一样只使用python run.py