2013-05-07 10 views
35

Jestem nowy w heroku i gunicorn, więc nie jestem pewien, jak to działa. Ale przeszukano i myślę, że jestem blisko wdrożenia mojej aplikacji Django (1.5.1). Więc wiem, że potrzebuję pliku Procfile, który maJak mogę zmodyfikować Procfile, aby uruchomić proces Gunicorn w niestandardowym folderze na Heroku?

Ponieważ moje katalogi są nieco inne. Nie mogę uruchomić gunicorn w katalogu głównym

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

Normalnie aplikacja byłaby katalogu/root, ale postanowiłem uporządkować Moje foldery w ten sposób, aby oddzielić mój django aplikacji z innych rzeczy. Ponieważ muszę umieścić plik Procfile w katalogu głównym, aby go rozpoznać, co powinienem umieścić w pliku Procfile i/lub jakie parametry powinienem umieścić w komendzie gunicorn?

Uwaga:

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 Jestem ciekawy ... dlaczego nie chcesz dodać pliku __init__.py do aplikacji/folderu najwyższego poziomu? – eikonomega

+0

Próbowałem dodać \ _ \ _ init \ _ \ _. Py do katalogu najwyższego poziomu w tym samym układzie projektu, który nie rozwiązuje wszystkich błędów. Mimo, że przekazałeś błąd importu projektu, to przychodzi błąd importu ustawień, ponieważ nie są one w ścieżce Pythona. Zatem rozwiązanie Grahama jest prawdopodobnie najlepszym dostępnym. –

Odpowiedz

3

Zrobiłem brzydki siekać uzyskania tej pracy. Więc mam zamiar pisać moją odpowiedź, ale mam nadzieję, że chłopaki mogą wymyślić lepszego rozwiązania

Procfile

web: sh ./app/run.sh 

app_project/app/run.sh

#!/bin/bash 

cd app 
gunicorn app.wsgi 
43

Spróbuj:

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

Dosłownie spędziłem pół godziny szukając obejścia. Dziękuję Ci! –

+1

@ansimionescu nazywaj się szczęściem! :) – martynas

+0

Kolejny facet, który uratował mój dzień! <3 –

31

Jak @Graham Dumpleton stwierdził w swojej odpowiedzi, problemem pO mógłby być rozwiązany poprzez modyfikację jego Procfile do f ollowing:

web: gunicorn --pythonpath app app.wsgi

Dlaczego to działa:

  • Pamiętaj, że Procfile jest po prostu wykorzystywane przez Heroku, aby rozpocząć proces. W tym przypadku procesy gunicorn.
  • Argument Gunicorn za --pythonpath pozwala na dynamiczne dołączanie katalogu do listy katalogów, których moduł wykonawczy Python wyszukuje podczas wyszukiwania modułów.
  • Po dodaniu --pythonpath app do komendy gunicorn tłumaczowi powiedziano "zajrzeć do katalogu aplikacji dla pakietu (również) o nazwie app, który zawiera moduł o nazwie wsgi. `

nazw rodzajowych folderów w pytaniu PO może przesłonić składni polecenia, która przedstawia się następująco: gunicorn --pythonpath <directory_containing_package> <package>.<module>

Więcej informacji:
Gunicorn Documentation

+0

Doskonałe wyjaśnienie każdego z różnych argumentów – kas