2012-05-20 27 views
7

Contexto: Estoy escribiendo una aplicación de matraz de tamaño mediano (10-15 visitas), y en el proceso, espero organizar el código de una manera que lo haga fácil de mantener y extensible (no es un archivo monolítico como la mayoría de las aplicaciones de Flask).Procfile gunicorn nombre de módulo personalizado

La estructura de los imita la aplicación documentation de la siguiente manera:

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

Problema: Soy incapaz de conseguir capataz de trabajar con una aplicación frasco que no se llama 'app'. Me encantaría tener run.py ser el punto de entrada a mi aplicación.

estoy usando gunicorn + GEvent, y mi actual Procfile contiene:

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

He estado usando run.py para probar la aplicación:

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

lo tanto asumí que simplemente podría sustituir run de app en el archivo de proceso, pero al ejecutar foreman start, gunicornio falla con verborrea sin sentido sobre los módulos.

Respuesta

10

Encontré la solución en Django's documentation. El parámetro principal de gunicorn es módulo:

gunicorn [OPTIONS] APP_MODULE

Dónde APP_MODULE es del patrón MODULE_NAME:VARIABLE_NAME

Aunque parecía lógico que la sintaxis sea una aplicación argumento de palabra clave: someIdentifier, ya que todos los tutoriales de uso un módulo llamado app, de hecho no es el caso. El argumento correcto para mi situación fue run:app.

+0

Tengo una configuración muy similar y aunque entiendo por qué se ejecutará: aplicación, todavía no funciona en mi extremo. ¿Qué hay en tu archivo awesome.py, exactamente? – Caroline

+0

En este caso, awesome.py contiene la definición del objeto de la aplicación (y, cuando escribí aplicaciones sencillas de matraz monolítico, todas las vistas, etc.). Desde el directorio en el que ejecuta gunicorn, ¿cómo importaría el objeto 'app'? ES DECIR. de la aplicación foo import. Ese módulo, combinación de nombre de variable es lo que necesita pasar a gunicornio. ¿Puede proporcionar más información y detalles sobre su configuración? Feliz de ayudar a través del correo electrónico (Mi nombre de usuario @ gmail.com) –

+0

Para referencia futura de cualquier otra persona. Arreglé mi problema y explico cómo en http://stackoverflow.com/questions/22921187/flask-and-gunicorn-multiple-modules-circular-imports-not-all-routes-accessib. – Caroline

Cuestiones relacionadas