2013-05-07 27 views
35

我是新來的heroku和gunicorn,所以我不知道這是如何工作的。但我已經做了一些搜索,我想我已經接近部署我的Django應用程序(1.5.1)。所以我知道我需要一個Procfile具有如何修改Procfile在Heroku的非標準文件夾中運行Gunicorn進程?

web: gunicorn app.wsgi 

因爲我的目錄是有點不同。我不能在根目錄

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

通常應用程序/是根目錄下運行gunicorn,但我還是決定組織我的文件夾,這樣我的Django應用程序從一些其他的東西分開。由於我必須將Procfile放入heroku的根目錄才能識別它,我應該在Procfile中放入什麼和/或應該在gunicorn命令中放置什麼參數?

注:

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

我m好奇......爲什麼你不想將__init__.py文件添加到頂級應用程序/文件夾? – eikonomega 2013-05-08 00:22:03

+0

我試圖將\ _ \ _ init \ _ \ _。py添加到相同項目佈局的頂級目錄中,但它不能解決所有錯誤。即使你通過項目導入錯誤,然後有設置導入錯誤,因爲它們不在python路徑。所以格雷厄姆的解決方案可能是最好的。 – 2014-10-27 13:25:35

回答

3

我做了一個醜陋的黑客獲得此工作。所以我要發佈我的答案,但我希望你們能想出更好的解決方案

Procfile

web: sh ./app/run.sh 

app_project /應用/ run.sh

#!/bin/bash 

cd app 
gunicorn app.wsgi 
43

嘗試:

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

我剛剛花了半個小時尋找解決方法。謝謝! – 2014-05-03 17:28:30

+1

@ansimionescu自稱幸運! :) – martynas 2014-12-28 16:15:21

+0

另一個救了我一天的傢伙! <3 – 2016-08-10 14:18:49

31

As @Graham Dumpleton在他的回答中指出,OP的問題可以通過修改他的Procfile到f ollowing:

web: gunicorn --pythonpath app app.wsgi

爲什麼這個工程:

  • 記住,該Procfile簡單地使用Heroku的啓動過程。在這種情況下,gunicorn進程。
  • Gunicorn的--pythonpath參數允許您動態地將目錄附加到Python運行時搜索模塊查找的目錄列表。
  • 通過在gunicorn命令中加入--pythonpath app,解釋器基本上被告知'看到名爲app的程序包(也稱爲app)的app目錄內部,其中包含一個名爲wsgi的模塊。`

在OP的問題的文件夾的通用名稱可以掩蓋的命令的語法,主要內容如下: gunicorn --pythonpath <directory_containing_package> <package>.<module>

更多信息:
Gunicorn Documentation

+0

對每個不同論點的優秀解釋 – kas 2017-08-06 06:21:12