【问题标题】:Problems running Flask Web App on linux Debian using Gunicorn and Nginx使用 Gunicorn 和 Nginx 在 linux Debian 上运行 Flask Web App 的问题
【发布时间】:2020-03-11 13:20:19
【问题描述】:

所以我目前正在尝试使用 Flask、Debian 9、Gunicorn 将我的 Web 应用程序上线。 输入 > gunicorn wsgi:app 后我遇到的问题:

[2019-11-15 12:22:11 +0000] [11643] [ERROR] Exception in worker process
Traceback (most recent call last):
  File "/root/testing/venv/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
    worker.init_process()
  File "/root/testing/venv/local/lib/python2.7/site-packages/gunicorn/workers/base.py", line 129, in init_process
    self.load_wsgi()
  File "/root/testing/venv/local/lib/python2.7/site-packages/gunicorn/workers/base.py", line 138, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/root/testing/venv/local/lib/python2.7/site-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/root/testing/venv/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load
    return self.load_wsgiapp()
  File "/root/testing/venv/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/root/testing/venv/local/lib/python2.7/site-packages/gunicorn/util.py", line 350, in import_app
    __import__(module)
  File "/root/testing/wsgi.py", line 1, in <module>
    from __init__ import app
  File "/root/testing/__init__.py", line 44, in <module>
    create_app()
  File "/root/testing/__init__.py", line 24, in create_app
    from .models import User
ValueError: Attempted relative import in non-package
[2019-11-15 12:22:11 +0000] [11643] [INFO] Worker exiting (pid: 11643)
[2019-11-15 12:22:11 +0000] [11639] [INFO] Shutting down: Master
[2019-11-15 12:22:11 +0000] [11639] [INFO] Reason: Worker failed to boot.

我的 wsgi.py:

from __init__ import app

if __name__ == "__main__":
    app.run()

我的 init.py:

# init.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager 
from flask_bootstrap import Bootstrap

db = SQLAlchemy()

def create_app():
    app = Flask(__name__)
    Bootstrap(app)

    app.config['SECRET_KEY'] = 'secretkey'
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.sqlite'

    db.init_app(app)

    login_manager = LoginManager()
    login_manager.login_view = 'auth.login'
    login_manager.init_app(app)

    from .models import User

    @login_manager.user_loader
    def load_user(user_id):
        return User.query.get(int(user_id))

    from .auth import auth as auth_blueprint
    app.register_blueprint(auth_blueprint)

    from .main import main as main_blueprint
    app.register_blueprint(main_blueprint)

    if __name__ == '__name__':
        app.run()

    return app

create_app()

我的models.py:

models.py

from flask_login import UserMixin
from . import db

class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True) # primary keys are required by SQLAlchemy
    email = db.Column(db.String(100), unique=True)
    password = db.Column(db.String(100))
    name = db.Column(db.String(1000))

注意:所有的独立性都安装在我的 virtualenv 中,我尝试使用 gunicorn 只使用以下代码:

from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
    return "Hello World!"
if __name__ == '__main__':
    app.run(debug=True,host='0.0.0.0')

而且效果很好。

【问题讨论】:

  • 您永远不会从__init__ 导入,而是从包中导入。但很可能__init__.py 应该类似于app.py,然后您将导入不带点的models
  • @KlausD。感谢您的回复。我试过了,结果是 ImportError: No module named db.这是指models.py中的第4行
  • 那里相同,导入模型的方法相同。
  • 您能否澄清一下,因为from . import db 正在导入数据库文件。那么如何使用模型来完成呢?
  • 只要import db

标签: python nginx debian gunicorn wsgi


【解决方案1】:

我更改了每个具有 .并将init改为app,删除create_app函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 2021-06-24
    • 2022-01-18
    • 2014-09-14
    • 1970-01-01
    • 2018-08-03
    相关资源
    最近更新 更多