23

我正在尝试在 Gunicorn 服务器上引导 Flask 应用程序。通过将这两个工具的文档放在一起,再加上在 SO 上进行搜索,这就是我到目前为止所拥有的......但它并不完全有效。

应用程序.py

from flask import Flask, render_template
from flask.ext.sqlalchemy import SQLAlchemy
from werkzeug.contrib.fixers import ProxyFix

app = Flask(__name__)
app.wsgi_app = ProxyFix(app.wsgi_app)
db = SQLAlchemy(app)

@app.route('/')
def index():
    return render_template('index.html')

我跑了什么

从与 app.py 相同的目录中,

gunicorn app:app

即使从这么小的开始,我也错过了一些东西。错误消息不是很有帮助:

2013-09-12 20:13:07 [11461] [INFO] 开始 gunicorn 0.14.5
2013-09-12 20:13:07 [11461] [INFO] 收听:http://127.0.0.1:8000(11461)
2013-09-12 20: 13:07 [11461] [INFO] 使用工作者:同步
2013-09-12 20:13:07 [11528] [INFO] 使用 pid 引导工作者:11528
2013-09-12 20:13:07 [11528] [INFO ] Worker 退出(pid:11528)
2013-09-12 20:13:08 [11461] [INFO] 关闭:Master
2013-09-12 20:13:08 [11461] [INFO] 原因:Worker 无法启动.

顺便说一句,我在 Debian Linux 系统上运行它。非常感谢您的帮助!

更新

打开调试后,我收到了一些更具指导性的错误消息。这很快就变成了一个非常具体的问题:ImportError: No module named flask. 通常当我不使用我的 virtualenv 时,我会遇到这种错误——但我是。经过仔细检查,Gunicorn 似乎使用的 Python 版本与我的 virtualenv 使用的不同,即 Python3。所以......我的特定python似乎没有被使用。我该如何解决这个问题,并告诉 Gunicorn 使用正确的 Python?

4

6 回答 6

26

gunicorn 实用程序可能用尽了系统路径,而不是您的 virtualenv。

确保pip install gunicorn进入 virtualenv。

这是我为运行您的应用程序而设置的 virtualenv 的 pip freeze:

(so_2)20:38:25 ~/code/tmp/flask_so$ pip freeze
Flask==0.10.1
Flask-SQLAlchemy==1.0
Jinja2==2.7.1
MarkupSafe==0.18
SQLAlchemy==0.8.2
Werkzeug==0.9.4
gunicorn==18.0
itsdangerous==0.23
wsgiref==0.1.2

实际上,我只运行了这些pip install

$ pip install flask
$ pip install gunicorn
$ pip install Flask-SQLAlchemy
于 2013-09-13T01:40:05.320 回答
24

我和你有同样的问题。问题是 gunicorn 出于某种原因将环境加载到您的虚拟环境之外。我通过在虚拟环境外卸载包 gunicorn 解决了;

(env) $ deactivate
$ sudo pip uninstall gunicorn

所以你回到你的环境并尝试运行。在我的情况下,我输入了 env 文件夹:

$ source env/bin/activate
(env) $ pip install gunicorn
(env) $ gunicorn server:app
2013-10-19 20:40:56 [11923] [INFO] Starting gunicorn 18.0
2013-10-19 20:40:56 [11923] [INFO] Listening at: http://127.0.0.1:8000 (11923)
2013-10-19 20:40:56 [11923] [INFO] Using worker: sync
2013-10-19 20:40:56 [11926] [INFO] Booting worker with pid: 11926
于 2013-10-19T23:46:07.510 回答
6

Gunicorn 可能安装在系统中的多个位置。它可能存在于

  1. 操作系统默认 Python 路径
  2. 蟒蛇 Python 路径

默认情况下,当您指定

gunicorn -w 4 -b 127.0.0.1:5000 flaskApp:app

您指的是操作系统的默认 Python,其中未安装同一路径中的烧瓶包会导致错误。通过提供正确的 gunicorn 路径来更好地指定您要引用的 gunicorn

/home/sunil/anaconda2/bin/gunicorn -w 4 -b 127.0.0.1:5000 flaskApp:app

于 2017-08-31T06:09:27.900 回答
1

假设您的虚拟环境被调用env并且您的应用程序被调用app并且 gunicorn 安装正确。您可以尝试:

sudo env/bin/gunicorn --bind 0.0.0.0:5432 wsgi:app

这会强制应用在您的虚拟环境中使用 gunicron。

于 2021-03-17T14:18:39.390 回答
0

我尝试创建一个新的环境。并新安装了依赖项,它对我有用。另外,我正在使用 miniconda 来管理我的环境。

于 2020-05-28T06:29:32.493 回答
0

您可以使用which flask或检查使用了哪个烧瓶(base/<your_env>) which gunicorn。如果它是基础的,您需要从基础环境中卸载,然后在 <your_env> 中重新安装。您也可以使用pip install -I flask gunicorn.

于 2021-07-01T05:17:08.790 回答