2012-05-20 3 views
7

Contexte: Je vous écris une application de flacon de taille moyenne (10-15 vues), et dans le processus, j'espère organiser le code d'une manière qui fera facilement maintenable et extensible (pas un fichier monolithique comme la plupart des applications Flask).Procfile nom du module gunicorn personnalisé

La structure de l'application imite le documentation comme suit:

/AwesomeHackings 
    /ENV 
    /AwesomeHackings 
     /models 
     /static 
     /templates 
     /__init__.py 
     /awesome.py 
     /awesome.cfg 
    /Procfile 
    /README.MD 
    /requirements.txt 
    /run.py 

Problème: Je suis incapable d'obtenir contremaître de travailler avec une application de flacon qui n'est pas nommé « app ». J'aimerais que run.py soit le point d'entrée de mon application.

J'utilise gunicorn + gevent, et mon courant Procfile CONTIENT:

web: gunicorn -w 2 -b 0.0.0.0:$PORT -k gevent app:run 

J'utilise run.py pour tester l'application:

from AwesomeHackings import awesome 
awesome.app.run(debug=True) 

Ainsi, je suppose que je pourrais simplement remplacer run pour app dans le fichier Procfile, mais lors de l'exécution foreman start, gunicorn échoue avec un verbiage insignifiant sur les modules.

Répondre

10

J'ai trouvé la solution dans Django's documentation. Le paramètre principal de gunicorn est le module:

gunicorn [OPTIONS] APP_MODULE

APP_MODULE est du motif MODULE_NAME:VARIABLE_NAME

Bien qu'il semblait logique de la syntaxe à une application argument mot-clé: someIdentifier, comme tous les tutoriels utilisent un module nommé app, ce n'est en effet pas le cas. L'argument correct pour ma situation était run:app.

+0

J'ai une configuration très similaire et même si je comprends pourquoi il serait exécuté: app, il ne fonctionne toujours pas sur ma fin. Que contient votre fichier awesome.py, exactement? – Caroline

+0

Dans ce cas, awesome.py contient la définition de l'objet app (et, à l'époque où j'ai écrit des applications flacon monolithique simples, toutes les vues, etc.). A partir du répertoire où vous lancez gunicorn, comment importeriez-vous l'objet 'app'? C'EST À DIRE. de l'application import foo. Ce module, combinaison de noms de variables est ce qui doit être passé à gunicorn. Pouvez-vous fournir plus d'informations et de détails sur votre configuration? Heureux d'aider par courriel (Mon nom d'utilisateur @ gmail.com) –

+0

Pour la référence future de quelqu'un d'autre. J'ai corrigé mon problème et expliqué comment dans http://stackoverflow.com/questions/22921187/flask-and-gunicorn-multiple-modules-circular-imports-not-all-routes-accessib. – Caroline

Questions connexes