2012-05-20 73 views
7

上下文: 我正在寫一箇中等大小的應用程序(10-15個視圖),並且在此過程中,我希望以使其易於維護的方式組織代碼,可擴展(不像大多數Flask應用程序那樣是一個單一文件)。procfile gunicorn自定義模塊名稱

應用模仿documentation作爲的結構如下:

/AwesomeHackings 
    /ENV 
    /AwesomeHackings 
     /models 
     /static 
     /templates 
     /__init__.py 
     /awesome.py 
     /awesome.cfg 
    /Procfile 
    /README.MD 
    /requirements.txt 
    /run.py 

問題: 我無法得到工頭用未命名的「應用」的燒瓶中的應用工作。我很想將run.py作爲我的應用程序的入口點。

我使用gunicorn + GEVENT,和我目前的Procfile包含:

web: gunicorn -w 2 -b 0.0.0.0:$PORT -k gevent app:run 

我一直在使用run.py測試的應用程序:

from AwesomeHackings import awesome 
awesome.app.run(debug=True) 

因此,我認爲我可以簡單地替代run爲在Procfile中爲app,但是當執行foreman start時,gunicorn失敗並且模塊沒有任何意義。

回答

10

我在Django's documentation找到了解決方案。 gunicorn的主要參數是模塊:

gunicorn [OPTIONS] APP_MODULE

哪裏APP_MODULE是模式的MODULE_NAME:VARIABLE_NAME

雖然它似乎合乎邏輯的語法是關鍵字參數應用:someIdentifier,因爲所有的教程使用一個名爲app的模塊,事實上並非如此。我的情況正確的論點是run:app

+0

我有一個非常類似的設置,雖然我明白爲什麼它會運行:應用程序,它仍然不能在我的結束。你的awesome.py文件中究竟有什麼? – Caroline

+0

在這種情況下,awesome.py包含應用程序對象的定義(並且,當我編寫簡單的單片燒瓶應用程序,所有視圖等時)。 從你運行gunicorn的目錄中,你將如何導入'app'對象? I.E.從富進口應用程序。該模塊,變量名稱組合是需要傳遞給gunicorn的。 你能提供更多關於你的設置的信息和細節嗎?很高興幫助通過電子郵件(我的用戶名@ gmail.com) –

+0

對於其他人的未來參考。我解決了我的問題,並解釋瞭如何在http://stackoverflow.com/questions/22921187/flask-and-gunicorn-multiple-modules-circular-imports-not-all-routes-accessib。 – Caroline