Error: gunicorn: Failed to find application object 'app' in 'app'
Error: gunicorn: Failed to find application object 'app' in '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')
...
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 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"
我做错了什么?
您有一个名为 app
的文件夹(如文件中的导入行所示)和一个 app.py
文件。
Gunicorn 将尝试在 app
模块中找到 app
WSGI 变量,在您的例子中它被标识为 app/__init__.py
您需要重命名文件夹或 app.py
文件以避免此冲突。
我发现这个错误只发生在 gunicorn 版本 20+ 上。当我降级到版本 19.9.0 时,即使文件夹和 app.py
共享相同的名称,它也能正常工作。
这是我的代码:
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 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"
我做错了什么?
您有一个名为 app
的文件夹(如文件中的导入行所示)和一个 app.py
文件。
Gunicorn 将尝试在 app
模块中找到 app
WSGI 变量,在您的例子中它被标识为 app/__init__.py
您需要重命名文件夹或 app.py
文件以避免此冲突。
我发现这个错误只发生在 gunicorn 版本 20+ 上。当我降级到版本 19.9.0 时,即使文件夹和 app.py
共享相同的名称,它也能正常工作。