2012-07-08 87 views
4

我最近將我的第一個Django應用程序部署到Heroku。這是我的主人的項目,所以可擴展性不是一個大問題。我已閱讀了直接從Heroku提供靜態和媒體文件可能出現的問題,並且Amazon S3是最佳解決方案。到目前爲止,靜態文件--CSS,JS - 正在Heroku中正常使用。Django:直接從Heroku提供靜態,媒體文件

雖然媒體文件有點問題。

用戶上傳的唯一媒體是照片。再次,因爲這是一個小項目,音量會很低。目前,這些照片正在正常使用。但是當更新推送到Heroku時,與現有上傳照片的鏈接在頁面上斷開並且必須重新上載以再次出現,這顯然是不可接受的。

我試圖辨別這是否是服務媒體可能由外部主機(如Amazon S3或其他正在發生的問題)解決的問題。我不急於支付託管費用,但是如果它能解決這個問題,那麼它可能就是選擇的解決方案。

任何見解或經驗的歡迎。

+0

對問題的描述很好。 – 2016-07-15 12:52:14

回答

11

這是預期的行爲,因爲寫入到Heroku Web dyno的文件系統不會添加到源代碼管理中,並且不會被視爲「您的應用程序的一部分」。基本上,除了臨時文件之外,你不應該允許任何對文件系統的寫操作。

這不僅是將更新推送到應用程序導致文件消失的問題;此外,如果您有多個網頁dynos(Heroku應用程序中最典型的用例),那麼您的文件只會出現在碰到他們上傳到的網頁dyno的用戶。

解決方案是讓用戶直接上傳到另一臺服務器或S3並將鏈接傳遞給您的應用程序,或者讓您自己的服務器自動將上傳的文件發送到另一個目標,如S3本身。事實上,像S3這樣的靜態資產也可以更好地服務於S3,但這有時是實用的,有時並非如此。

+0

這是一個很好的答案。我可能會轉向S3;它似乎並不昂貴。這也可能與我爲什麼在同步更新後Haystack搜索沒有返回結果有關,儘管它可能完全是另一個問題。謝謝。 – 2012-07-08 02:30:14