[英]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 可能安裝在您系統中的多個位置。 它可能存在於
默認情況下,當您指定
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 flask
或which gunicorn
檢查使用了哪個燒瓶(base/<your_env>)。 如果它是基礎的,您需要從基礎環境中卸載,然后在 <your_env> 中重新安裝。 您也可以使用pip install -I flask gunicorn
在 <your_env > 中強制安裝。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.