2016-04-01 6 views
5

Ich habe eine Flask-App, die ich über Gunicorn zu bedienen versuche.Gunicorn konnte die Flask-Anwendung nicht laden

Ich benutze virtualenv und python3. Wenn ich meine Venv cd meiner app Basis dir aktivieren dann laufen:

gunicorn mysite:app 

ich:

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 

Suchen Sie in/etc/nginx/sites-available Ich habe nur die Datei 'default'. In Sites-aktiviert habe ich keine Datei.

In meiner nginx.conf Datei ich habe:

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

App Struktur:

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

in manage.py für mysite Ich habe folgende:

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

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

In __init__.py Datei:

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

In meinem settings.py im App-Verzeichnis

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

Aus dem Innern des virtualenv, wenn ich laufe

print(sys.path) 

ich einen Weg zu Python und Website-Pakete für diese virtualenv finden.

Von dem, was ich gelesen habe, zu beginnen gunicorn es ist nur eine Frage der Installation und gunicorn mysite läuft: app

Lauf gunicorn aus dem übergeordneten Verzeichnis von mysite bekomme ich die gleiche konnte Anwendung finden: ‚mysite‘ App konnte Fehler nicht laden, aber bekomme nicht die DEBUG ... Config() geloggt (da wir uns eindeutig im falschen Verzeichnis befinden). Laufendes gunicorn von mysite/mysite (eindeutig falsch) bekomme ich und Exception in worker process emeror, ImportError: Kein Modul namens 'mysite'.

Irgendwelche Hinweise, wie ich Gunicorn laufen lassen kann?

Antwort

6

Sie zeigen Gunicorn unter mysite:app, was from mysite import app entspricht. Es gibt jedoch kein app Objekt in der oberen Ebene mysite. Sagen Sie Gunicorn, um die Fabrik anzurufen.

gunicorn "mysite:create_app()" 

Sie können auch Argumente an den Aufruf übergeben.

gunicorn "mysite:create_app('production')" 

Intern ist dies gleichbedeutend mit:

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

Alternativ können Sie eine separate Datei verwenden, die das Setup funktioniert. In Ihrem Fall haben Sie bereits eine app in manage.py initialisiert.

gunicorn manage:app