Gunicorn与Flask使用错误的Python

时间:2013-09-13 01:18:34

标签: python flask gunicorn

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

app.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] [信息]聆听:http://127.0.0.1:8000(11461)
  2013-09-12 20:13:07 [11461] [INFO]使用worker:sync
  2013-09-12 20:13:07 [11528] [INFO]用pid引导工人:11528
  2013-09-12 20:13:07 [11528] [INFO]工人退出(pid:11528)
  2013-09-12 20:13:08 [11461] [信息]关闭:主人
  2013-09-12 20:13:08 [11461] [INFO]原因:工人无法启动。

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

更新

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

6 个答案:

答案 0 :(得分:21)

gunicorn实用程序可能正在耗尽系统路径,而不是你的虚拟实验室。

确保pip install gunicorn进入virtualenv。

这是我设置的virtualenv pip冻结以运行你的应用程序:

(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 s:

$ pip install flask
$ pip install gunicorn
$ pip install Flask-SQLAlchemy

答案 1 :(得分:15)

我和你有同样的问题。 问题是,由于某种原因,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

答案 2 :(得分:6)

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

  1. 操作系统默认Python路径
  2. Anaconda Python Path
  3. 默认情况下指定

      

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

    您正在参考操作系统的默认Python,其中未安装相同路径的烧瓶包会导致错误。 通过为gunicorn提供正确的路径,更好地指明你正在努力的哪个枪炮

      

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

假设您的虚拟环境名为 env,您的应用名为 app,并且 gunicorn 已正确安装。您可以尝试:

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

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

答案 5 :(得分:0)

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