2016-12-29 1 views
0

J'ai changé mon application en cours d'exécution avec flask et python2.7 d'une solution autonome à flask avec apache et mod_wsgi.Flask avec mod_wsgi - Impossible d'appeler mes modules

Mon application Flask (app.py) inclut des classes qui se trouvent dans le répertoire situé sous mon répertoire app (../).

Voici mon app.wsgi:

 

    #!/usr/bin/python 
    import sys 
    import logging 
    logging.basicConfig(stream=sys.stderr) 
    sys.stdout = sys.stderr 


    project_home = '/opt/appdir/Application/myapp' 
    project_web = '/opt/appdir/Application/myapp/web' 


    if project_home not in sys.path: 
     sys.path = [project_home] + sys.path 

    if project_web not in sys.path: 
     sys.path = [project_web] + sys.path 

    from app import app 
    application = app 

Avant ma configuration mod_wsgi mon appel principal dans le app.py ressemble à ça:

 

    # Main 
    if __name__ == '__main__' : 
     from os import sys, path 
     sys.path.append(path.dirname(path.dirname(path.abspath(__file__)))) 
     from logger import Logger 
     from main import Main 
     from configReader import ConfigReader 
     print "Calling flask" 
     from threadhandler import ThreadHandler 
     ca = ConfigReader() 
     app.run(host="0.0.0.0", threaded=True) 

Je suis parfaitement capable de charger mes classes dans le répertoire ci-dessous. Après avoir exécuté l'application avec mod_wsgi je reçois l'erreur suivante: nom global \ « Main \ » est pas défini

Alors, comment dois-je changer mon application que cela ici travail:

 

    @app.route("/") 
    def test(): 
     main = Main("test") 
     return main.responseMessage() 

Merci pour votre réponse.

Meilleures salutations Joern

+0

Avez-vous essayé de 'importer Main'in votre application wsgi? – saitam

+0

Rien sous cette vérification '' __main__'' ne sera exécuté sous mod_wsgi car votre script n'est pas exécuté en tant que script principal. Tout ce qui met en place '' sys.path'' doit être fait dans '' app.wsgi'' ou mieux encore dans la configuration Apache pour mod_wsgi. Tout le reste, comme l'importation de modules, doit toujours être fait en haut de tout fichier de code qui en a besoin. –

Répondre

0

Merci d'avoir répondu à ma demande. Aucun appel de fonction principale avec mod_wsgi n'était la bonne réponse. Je n'ai pas implémenté mes modules requis dans le fichier wsgi, mais au-dessus de l'application flask. Les travaux bien pour moi;)

Merci et une nouvelle année divine pour vous tous.

Meilleurs voeux Joern