2013-05-07 11 views
35

Sono nuovo di heroku e gunicorn, quindi non sono sicuro di come funzioni. Ma ho fatto qualche ricerca e penso di essere vicino a distribuire la mia app Django (1.5.1). Quindi so che ho bisogno di un Procfile che abbiaCome posso modificare Procfile per eseguire il processo Gunicorn in una cartella non standard su Heroku?

web: gunicorn app.wsgi 

Perché le mie directory sono un po 'diverse. Non è possibile eseguire gunicorn nella directory principale

app_project 
    requirements/ 
    contributors/ 
    app/ 
     app/ 
      settings/ 
      wsgi.py 
     # Normally Procfile goes here 
    Procfile 

Normalmente app/sarebbe la directory principale, ma ho deciso di strutturare le mie cartelle in questo modo di separare il mio Django app da alcune altre cose. Dato che devo mettere il Procfile nella directory root per heroku per riconoscerlo, cosa devo inserire nel Procfile e/o quali parametri dovrei inserire nel comando gunicorn?

Nota:

web: gunicorn app.wsgi # won't work because Procfile is in a directory above 
         # I also want to keep the directories as is 
         # I also don't want to create a secondary git inside the app folder just for heroku 
web: gunicorn app.app.wsgi # won't work because I don't want to convert the folder into a python module 
+0

I' m curioso ... perché non vuoi aggiungere un file __init__.py alla app/cartella di primo livello? – eikonomega

+0

Ho provato ad aggiungere \ _ \ _ init \ _ \ _. Py alla directory di livello superiore nello stesso layout di progetto e non risolve tutti gli errori. Anche se si passa l'errore di importazione del progetto, allora arriva l'errore di importazione delle impostazioni, perché non si trovano nel percorso python. La soluzione di So Graham è probabilmente la migliore disponibile. –

risposta

3

ho fatto un brutto hack per ottenere questo lavoro. Così ho intenzione di pubblicare la mia risposta, ma spero che voi ragazzi può trovare una soluzione migliore

Procfile

web: sh ./app/run.sh 

app_project/app/run.sh

#!/bin/bash 

cd app 
gunicorn app.wsgi 
43

Prova:

web: gunicorn --pythonpath app app.wsgi 
+1

Ho letteralmente passato mezz'ora a cercare una soluzione alternativa. Grazie! –

+1

@ansimionescu ti chiami fortunato! :) – martynas

+0

Un altro ragazzo che mi ha salvato la giornata! <3 –

31

Come @Graham Dumpleton dichiarato nella sua risposta, il problema del PO potrebbero essere risolti modificando suo Procfile alla f opo:

web: gunicorn --pythonpath app app.wsgi

Perché funziona:

  • Ricordate, che il Procfile viene semplicemente utilizzato da Heroku per avviare i processi. In questo caso, i processi di gunicorn.
  • L'argomento di Gunicorn --pythonpath consente di allegare dinamicamente una directory all'elenco delle directory che il runtime di Python cerca quando esegue la ricerca dei moduli.
  • Aggiungendo --pythonpath app al comando gunicorn, l'interprete è stato sostanzialmente detto 'guarda all'interno della directory app per un pacchetto (anche) chiamato app che contiene un modulo chiamato wsgi. `

I nomi generici delle cartelle in questione del PO può oscurare la sintassi del comando, che è la seguente: gunicorn --pythonpath <directory_containing_package> <package>.<module>

Ulteriori informazioni:
Gunicorn Documentation

+0

Ottima spiegazione di ciascuno dei diversi argomenti – kas

Problemi correlati