Il mio problema:
Quando si usa gunicorn come mio server HTTP WSGI, caposquadra non riesce a trovare l'applicazione Django (wsgi?).
Struttura di applicazione:
Nella mia applicazione Django, ho le cose strutturate in questo modo:
<git_repository_root>/
<django_project_root>/
<configuration_root>/
Il <git_repository_root>
contiene gli aspetti relativi alla gestione e alla distribuzione del progetto (requirements.txt
, Procfile
, fabfile.py
, eccetera.)
Il <django_project_root>
contiene le mie app Django e la logica dell'applicazione.
Finalmente, il <configuration_root>
contiene il mio settings.py
e wsgi.py
.
Quello che ho provato:
Mio Procfile
dovrebbe assomigliare a questo (secondo il Heroku Docs):
web: gunicorn myapp.wsgi
Durante la corsa foreman start
con questo layout di progetto, viene visualizzato un errore:
ImportError: Import by filename is not supported.
Cosa funziona:
Se sposto il mio Procfile da <git_repository_root>
a <git_repository_root>
funziona localmente. Dopo aver spinto verso Heroku (nota: Heroku vede <git_repository_root>
) Non posso ridimensionare alcun lavoratore / aggiungere processi. Ottengo quanto segue:
Scaling web dynos... failed
! No such process type web defined in Procfile.
Credo di volerlo Procfile
nel mio <git_repository_root>
comunque - quindi perché non funziona? Ho anche provato a cambiare il Procfile
a:
web: gunicorn myapp/myapp.wsgi
ma senza fortuna. Qualsiasi aiuto sarebbe molto apprezzato!
risposte:
1 per risposta № 1Muovi il tuo Procfile
di nuovo a <git_repository_root>
e usare:
web: gunicorn <django_project_root>.myapp:myapp
sostituendo l'ultimo "myapp" con il nome della classe della tua app, presumibilmente si tratta effettivamente di "myapp".
... e leggi il messaggio di errore: ti sta dicendo che non puoi importare la tua classe lavoratore (app
) per nome file (myapp.wsgi), quindi ovviamente dicendo dirname/myapp.wsgi
non funzionerà pure. Hai bisogno di un Python module:class
sintassi.
0 per risposta № 2
Tratta la voce nel tuo Procfile
come un comando bash. Puoi cd
nel tuo <django_project_root>
e quindi eseguire il server.
Ad esempio, il tuo Procfile
(che dovrebbe essere nel tuo <git_repository_root>
) potrebbe assomigliare a questo:
web: cd <django_project_root> && gunicorn
--env DJANGO_SETTINGS_MODULE=<configuration_root>.settings
<configuration_root>.wsgi