这是我的代码:
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') ...
repository.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和pipenv shell,但我也在docker容器上尝试过并遇到相同的错误。这是我的点子文件:
[[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"
我究竟做错了什么?
您有一个名为的文件夹app(如文件中的导入行)和一个app.py文件。
app
Gunicorn将尝试app在app模块内部找到WSGI变量,在您的情况下,该变量被标识为app/__init__.py
app/__init__.py
您需要重命名文件夹或app.py文件以避免这种冲突。