【问题标题】:Flask-MySQLdb not working with gunicorn and flaskFlask-MySQLdb 不能与 gunicorn 和烧瓶一起使用
【发布时间】:2018-09-12 22:22:13
【问题描述】:

我在 virtualenv 中使用 FlaskMySQL(版本 14.14 Distrib 5.7.20,适用于 osx10.13 (x86_64))。如果我使用命令python3 app.py 运行以下app.py 文件,则一切运行良好。但是,如果我使用gunicorn 使用命令gunicorn --bind 0.0.0.0:8000 app:app 运行它,则会收到以下错误。 MySQL 和 Flask-MySQLdb 安装正确,mysqlclient 也安装好了。

[2018-04-03 19:54:42 +0530] [36173] [INFO] Starting gunicorn 19.7.1
[2018-04-03 19:54:42 +0530] [36173] [INFO] Listening at: http://0.0.0.0:8000 (36173)
[2018-04-03 19:54:42 +0530] [36173] [INFO] Using worker: sync
[2018-04-03 19:54:42 +0530] [36176] [INFO] Booting worker with pid: 36176
[2018-04-03 19:54:42 +0530] [36176] [ERROR] Exception in worker process
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/gunicorn/arbiter.py", line 578, in spawn_worker
    worker.init_process()
  File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/base.py", line 126, in init_process
    self.load_wsgi()
  File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/base.py", line 135, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/usr/local/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/usr/local/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
    return self.load_wsgiapp()
  File "/usr/local/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/usr/local/lib/python3.6/site-packages/gunicorn/util.py", line 352, in import_app
    __import__(module)
  File "/Users/parthapratimneog/Documents/Work/cams-colored-cheque-recognition/colored_cheque_recognition/app.py", line 3, in <module>
    from flask_mysqldb import MySQL
ModuleNotFoundError: No module named 'flask_mysqldb'
[2018-04-03 19:54:42 +0530] [36176] [INFO] Worker exiting (pid: 36176)
[2018-04-03 19:54:43 +0530] [36173] [INFO] Shutting down: Master
[2018-04-03 19:54:43 +0530] [36173] [INFO] Reason: Worker failed to boot.

app.py

import os
from flask import Flask, request, redirect, url_for, send_from_directory, flash, jsonify
from flask_mysqldb import MySQL

from werkzeug.utils import secure_filename

from vision import Cheque

app = Flask(__name__)

ROOT_DIR = app.root_path
UPLOAD_FOLDER = os.path.join(ROOT_DIR, 'uploads')
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'tif'}

app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
app.secret_key = 'asdlasj1283798uxXJOaisdj'
app.config['SESSION_TYPE'] = 'filesystem'

app.config['MYSQL_HOST'] = 'localhost'
app.config['MYSQL_USER'] = 'root'
app.config['MYSQL_PASSWORD'] = 'root'
app.config['MYSQL_DB'] = 'dbname'

mysql = MySQL(app)

if __name__ == '__main__':
    app.run(debug=True)


@app.route('/test',  methods=['GET'])
def test_mysql():
    cur = mysql.connection.cursor()
    cur.execute('''SELECT * FROM bank_details limit 2''')
    rv = cur.fetchall()
    return str(rv)

pip3 freeze output

click==6.7
cycler==0.10.0
decorator==4.2.1
Flask==0.12.2
Flask-MySQLdb==0.2.0
Flask-SQLAlchemy==2.3.2
gunicorn==19.7.1
imutils==0.4.6
itsdangerous==0.24
Jinja2==2.10
kiwisolver==1.0.1
MarkupSafe==1.0
matplotlib==2.2.2
mysqlclient==1.3.12
networkx==2.1
numpy==1.14.2
opencv-python==3.4.0.12
Pillow==5.0.0
PyMySQL==0.8.0
pyparsing==2.2.0
pytesseract==0.2.0
python-dateutil==2.7.2
pytz==2018.3
PyWavelets==0.5.2
scikit-image==0.13.1
scipy==1.0.1
six==1.11.0
SQLAlchemy==1.2.6
Werkzeug==0.14.1

根据 gunicorn 错误,似乎 gunicorn 没有在虚拟环境中使用 python。如果这是正确的,我如何让 gunicorn 使用虚拟环境中的 python。如果不是,还有什么问题?

编辑

在 PyCharm 中,我收到以下警告。

【问题讨论】:

    标签: python flask mysql-python gunicorn


    【解决方案1】:

    好的,我找到了问题。说实话有点傻。已经从以前的项目全局安装了gunicorn,并且不知何故在virtualenv 内部,全局gunicorn 被调用。

    所以,我卸载了全局 gunicorn,然后只在我的 virtualenv 内再次安装它,它开始像魅力一样工作。

    【讨论】:

      猜你喜欢
      • 2017-05-24
      • 1970-01-01
      • 2016-01-24
      • 1970-01-01
      • 1970-01-01
      • 2014-09-15
      • 1970-01-01
      • 2016-03-19
      • 1970-01-01
      相关资源
      最近更新 更多