错误:gunicorn:无法在“app”中找到应用程序对象“app”

新手上路,请多包涵

这是我的代码:

应用程序.py

 from flask_graphql import GraphQLView
from app.infrastructure.graphql import schema
from app.infrastructure.api_resource import app

app.add_url_rule('/graphql', view_func=GraphQLView.as_view('graphql', schema=schema, graphiql=True))

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

api_resource.py

 import app.infrastructure.repository as repository
from flask import request, url_for
from flask_restplus import Api, Resource, fields
from sqlalchemy_pagination import paginate
from sqlalchemy_fulltext import FullTextSearch

app = repository.app
api = Api(app, version='0.1', title='xxxxx',
          description='xxxxx')
...

存储库.py

 from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from app.domain.model import Base

connection_string = 'xxxxxx'

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = connection_string
app.config['SQLALCHEMY_ECHO'] = True
db = SQLAlchemy(app, metadata=Base.metadata)

但是,当我执行 gunicorn 命令“gunicorn app: app”时,出现此错误:

>  Failed to find application object 'app' in 'app'
>
> ```

我在 ubuntu 16.04 上使用 pipenv whith pipenv shell,但我也尝试了一个 docker 容器并得到了同样的错误。这是我的 pip 文件:

[[source]] url = “https://pypi.python.org/simple” verify_ssl = true name = “pypi”

[dev-packages]

[packages] flask-graphql = “” flask-sqlalchemy = “” sqlalchemy-fulltext-search = “” graphene-sqlalchemy = “>=2.0” flask-marshmallow = “” sqlalchemy-pagination = “” flask-restplus = “” requests = “” mysqlclient = “” gunicorn = “*”

[requires] python_version = “3.6”

”`

我究竟做错了什么?

原文由 jhonatan teixeira 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

您有一个名为 app 的文件夹(如文件中的导入行所示)和一个 app.py 文件。

Gunicorn 将尝试在 app 模块中找到 app WSGI 变量,在您的情况下,它被标识为 app/__init__.py

您需要重命名文件夹或 app.py 文件以避免此冲突。

原文由 Jundiaius 发布,翻译遵循 CC BY-SA 4.0 许可协议

我发现这个错误只发生在 gunicorn 版本 20+ 上。当我降级到版本 19.9.0 时,即使文件夹和 app.py 共享相同的名称,它也能正常工作。

原文由 Marcio Fonseca 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题