Flask et uWSGI-impossible de charger l'application 0 (mountpoint=") (appelable introuvable ou erreur d'importation)
Je reçois l'erreur ci-dessous quand j'essaie de démarrer Flask en utilisant uWSGI. Voici comment je commence:
> # cd ..
> root@localhost:# uwsgi --socket 127.0.0.1:6000 --file /path/to/folder/run.py --callable app - -processes 2
Voici ma structure de répertoire:
-/path/to/folder/run.py
-|app
-|__init__.py
-|views.py
-|templates
-|static
Contenu de /path/to/folder/run.py
if __name__ == '__main__':
from app import app
#app.run(debug = True)
app.run()
Contenu de /path/to/folder/app/__init__.py
import os
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.login import LoginManager
#from flaskext.babel import Babel
from config import basedir
app = Flask(__name__)
app.config.from_object('config')
#app.config.from_pyfile('babel.cfg')
db = SQLAlchemy(app)
login_manager = LoginManager()
login_manager.setup_app(app)
login_manager.login_view = 'login'
login_manager.login_message = u"Please log in to access this page."
from app import views
*** Operational MODE: preforking ***
unable to find "application" callable in file /path/to/folder/run.py
unable to load app 0 (mountpoint='') (callable not found or import error)
*** no app loaded. going in full dynamic mode ***
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI worker 1 (pid: 26972, cores: 1)
spawned uWSGI worker 2 (pid: 26973, cores: 1)
2 réponses
UWSGI ne charge pas votre application en tant que __main__
, donc il ne trouvera jamais le app
(puisque cela n'est chargé que lorsque l'application est exécutée en tant que name __main__
). Ainsi, vous devez l'importer en dehors du bloc if __name__ == "__main__":
.
Changement très simple:
from app import app
if __name__ == "__main__":
app.run()
Maintenant, vous pouvez exécuter l'application directement avec python run.py
ou l'exécuter via uWSGI comme vous l'avez.
J'ai eu des problèmes avec la solution acceptée parce que mon application flask était dans une variable appelée app
. Vous pouvez résoudre cela en mettant juste ceci dans votre wsgi:
from module_with_your_flask_app import app as application
Donc, le problème était simplement que uwsgi attend une variable appelée application
.