2013-05-16 64 views
3

通常,問題在於如何在開發環境中爲靜態文件提供服務,而在我的情況中則相反。所以我已經使用Apache和mod_wsgi部署了一個Flask應用程序,配置了Apache來在/ static url上提供我的靜態文件。現在我不確定這些文件是由Apache還是由Flask提供的,因爲flask默認使用相同的靜態路徑。在生產中使用Flask的靜態文件

在模板中,我使用了url_for(「static」,filename =「style.css」)。它工作正常。但是,這是問題,因爲我不知道什麼是我的靜態文件。當然,如果我將每個模板更改爲硬編碼路徑以及與默認Flask不同的東西,但我可以確定Apache正在服務,但這聽起來不像正確的解決方案。

因此,總結我的問題:如何在Flask(模板)中使用url_for(靜態)並確保Flask不爲他服務?

感謝, Rapolas K.

回答

6
  1. 設置另一個靜態文件夾(你需要還可以創建文件系統的空文件夾):

    app = Flask(__name__, static_url_path='static', static_folder='static_test') 
    

    所以,如果你得到404隨後將通過其他燒瓶阿帕奇投放文件。

  2. 添加測試文件夾和映射Apache爲靜態文件夾。

    因此,如果您從測試文件夾獲取內容,然後通過apache其他瓶子提供文件。

  3. 打破任何static端點請求:

    @app.before_request 
    def break_static(): 
        if request.endpoint == 'static': 
         abort(404) 
        return None 
    

    class YourApp(Flask): 
        def send_static_file(self, filename): 
         abort(404) 
    

    所以,如果你得到404隨後將文件通過flaks其他服務的Apache。

但是,如果你真的不確定,你足夠一次測試這種情況。如果apache配置不會改變,那麼靜態服務行爲也不會改變。

+0

謝謝,這回答了我的問題。在1.之後,我得到了由Flask提供的文件,而不是Apache。因此,它看起來像一個解決方法,向Flask應用程序添加一些僞造的static_folder選項,否則不清楚爲這些靜態文件提供了什麼服務......但是留下一個問題是性能會受損,而Flask總是試圖提供靜態文件。 –

+0

也許你錯了apache配置,因爲使用正確的設置apache必須處理來自setted目錄的這些文件。 – tbicr

+0

我更改了apache conf來有意地提供不同的目錄,以查看Flask是否還在服務這些文件。這是我的擔憂,如果Flask和Apache都在同一個目錄下服務,我不知道哪個優先。將Flask設置爲空目錄後,我確信Apache正在處理靜態文件。 –

0

你可以確信,只要你有這樣的:

if __name__ == '__main__': 
    app.run() 

的app.run()調用實際啓動本地開發服務器。在製作過程中,您將/不應該調用此功能,因此開發人員無法提供任何服務。服務器,因爲它從未啓動。

+0

我不確定。如果我更改Apache以在不同路徑上提供文件,那些文件仍然可以通過舊的Flask靜態路徑以及新的Apache路徑訪問。但是url_for生成Flask路徑,而不是Apache提供的路徑。 –

相關問題