/ / Specifica della radice del progetto durante la distribuzione su Heroku - django, deploy, heroku

Specifica del root del progetto durante la distribuzione su Heroku - django, deployment, heroku

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 № 1

Muovi 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