web-dev-qa-db-fra.com

Erreur: gunicorn: impossible de trouver l'objet d'application 'app' dans 'app'

Voici mon code:

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)

Cependant, lorsque j'exécute la commande gunicorn "gunicorn app: app" j'obtiens cette erreur:

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

J'utilise pipenv avec pipenv Shell sur Ubuntu 16.04, mais j'ai également essayé un conteneur Docker et j'ai eu la même erreur. voici mon fichier 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"

Qu'est-ce que je fais mal?

8

Vous avez un dossier appelé app (comme par les lignes d'importation dans votre fichier) et un app.py fichier.

Gunicorn essaiera de trouver la variable WSGI app dans le module app, qui dans votre cas est identifié comme app/__init__.py

Vous devez renommer votre dossier ou votre app.py fichier pour éviter ce conflit.

7
Jundiaius