2012-03-06 39 views
11

我試圖讓在Heroku上使用Rails運行Unicorn時大量上傳,但我意識到任何大型上傳可能比獨角獸工作者的超時時間更長。這將意味着(我見過這種情況)Unicorn主進程將殺死上傳大文件的worker,並且請求將超時(503錯誤)。Unicorn + Rails + Large Uploads

沒有刪除或大規模增加我的服務器超時有沒有辦法讓上傳工作人員掛起,而上傳完成?或者,我是否完全誤解,並且最可能導致上傳超時的其他事情?

回答

7

如果你正在上傳到S3,那麼你可以「簡單地」讓用戶將文件直接上傳到S3而不是通過你的dynos,並在上傳完成時被ping通。

對於比這顯著的更多信息,請像CarrierWaveDirect

+0

我正在使用CarrierWaveDirect,但我仍然必須增加獨角獸工作者的超時時間,因爲即使您使用CarrierWaveDirect,如果文件上載時間過長,它們也會崩潰。 – cantonic 2013-02-27 21:12:01

8

如果你在你的獨角獸前使用nginx的反向代理,你可以使用Upload Module。配置後,nginx處理上傳並將其存儲在/ tmp目錄中,然後您的獨角獸獲取請求參數,告訴它上傳的資產位於何處以及它的內容類型。沒有更多的工作人員阻止接收上傳。

如果你真的不想在同一個服務器上上傳你的web服務,而是把它存儲在S3中,你應該遵循@Neil Middleton的建議並設置好上傳,直接上傳到上面。