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)
49
demandé sur akira 2012-08-20 03:30:49

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.

34
répondu Jeff Tratner 2012-08-19 23:46:04

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.

153
répondu Milimetric 2015-09-28 15:26:46