2016-04-01 9 views
5

Ho un'app Flask che sto cercando di servire tramite Gunicorn.Gunicorn non è riuscito a caricare l'applicazione Flask

Sto usando virtualenv e python3. Se posso attivare il mio venv cd per la mia app di base dir quindi eseguire:

gunicorn mysite:app 

ottengo:

Starting gunicorn 
Listening at http://127.0.0.1:8000 
DEBUG:mysite.settings:>>Config() 
... 
Failed to find application: 'mysite' 
Worker exiting 
Shutting down: master 
Reason: App failed to load 

Guardando in/etc/nginx/sites-available ho solo il file 'default'. In siti abilitati non ho file.

Nel mio file nginx.conf ho:

include /etc/nginx/conf.d/*.conf; 
include /etc/nginx/sites-enabled/*; 

App struttura:

mysite #this is where I cd to and run gunicorn mysite:app 
--manage.py 
--/mysite 
----settings.py 
----__init__.py 

in manage.py per mysite ho seguente:

logger.debug("manage.py entry point") 
app = create_app(app_name) 
manager = Manager(app) 

if __name__ == "__main__": 
    manager.run() 

In __init__.py di file:

def create_app(object_name): 
    app = Flask(__name__) 
    #more setup here 
    return app 

Nel mio settings.py nella cartella app

class Config(object): 
    logger.debug(">>Config()") #this logs OK so gunicorn is at least starting in correct directory 

Dall'interno della virtualenv se corro

print(sys.path) 

trovo un percorso di pitone e site-packages per questo virtualenv.

Da quello che ho letto per iniziare gunicorn è solo una questione di installarlo ed eseguire gunicorn mysite: app

Esecuzione gunicorn dalla directory principale della mysite ottengo lo stesso non è riuscito a trovare applicazione: 'miosito', L'app non è riuscita a caricare l'errore, ma non ha ottenuto il DEBUG ... Config() loggato (dato che siamo chiaramente nella directory sbagliata per iniziare). Esecuzione di gunicorn da mysite/mysite (chiaramente errato) I get ed Exception nel processo di lavoro ereor, ImportError: nessun modulo chiamato 'mysite'.

Eventuali indizi su come posso far funzionare Gunicorn?

risposta

6

Stai indicando gunicorn a mysite:app, che equivale a from mysite import app. Tuttavia, non è presente l'oggetto app nell'importazione di livello superiore (__init__.py) di mysite. Dì a Gunicorn di chiamare la fabbrica.

gunicorn "mysite:create_app()" 

È anche possibile passare argomenti alla chiamata.

gunicorn "mysite:create_app('production')" 

Internamente, questo equivale a:

from mysite import create_app 
app = create_app('production') 

In alternativa, è possibile utilizzare un file separato che fa il setup. Nel tuo caso, hai già inizializzato uno app in manage.py.

gunicorn manage:app 
Problemi correlati