簡體   English   中英

Gunicorn with Flask 使用錯誤的 Python

[英]Gunicorn with Flask using wrong Python

我正在嘗試在 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 : http://127.0.0.1:8000 :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] 工人退出 (pid: 11528)
2013-09-12 20:13:08 [11461] [INFO] 關閉:大師
2013-09-12 20:13:08 [11461] [INFO] 原因:Worker 無法啟動。

順便說一下,我在 Debian Linux 系統上運行它。 非常感謝您的幫助!

更新

打開調試后,我收到了一些更有指導意義的錯誤消息。 這很快就變成了一個非常具體的問題: ImportError: No module named flask 通常當我不使用我的 virtualenv 時,我會遇到這種錯誤——但我是。 經過仔細檢查,Gunicorn 似乎使用了不同於我的 virtualenv 使用的 Python 版本,即 Python3。 所以......我的特定python似乎沒有被使用。 我該如何解決這個問題,並告訴 Gunicorn 使用正確的 Python?

gunicorn 實用程序可能會耗盡系統路徑而不是您的 virtualenv。

確保將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

我和你有同樣的問題。 問題是,由於某種原因,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

Gunicorn 可能安裝在您系統中的多個位置。 它可能存在於

  1. 操作系統默認 Python 路徑
  2. 蟒蛇蟒路徑

默認情況下,當您指定

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

您指的是操作系統的默認 Python,其中未安裝相同路徑的 Flask 包會導致錯誤。 通過提供正確的 gunicorn 路徑,更好地指定您指的是哪個 gunicorn

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

我嘗試創建一個新的環境。 並新安裝了依賴項,它對我有用。 另外,我正在使用 miniconda 來管理我的環境。

假設您的虛擬環境稱為env並且您的應用程序稱為app並且 gunicorn 已正確安裝。您可以嘗試:

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

這會強制應用程序在您的虛擬環境中使用 gunicron。

您可以使用which flaskwhich gunicorn檢查使用了哪個燒瓶(base/<your_env>)。 如果它是基礎的,您需要從基礎環境中卸載,然后在 <your_env> 中重新安裝。 您也可以使用pip install -I flask gunicorn在 <your_env > 中強制安裝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM