2009-10-26 47 views
9

我有一個關於託管大型動態生成資產和Heroku的問題。Heroku:在沒有本地文件系統的情況下服務大型動態生成的資產

我的應用程序將提供其基礎數據的子集的批量下載,其中包含每24小時生成一次的大文件(> 100 MB)。如果我在服務器上運行,我只需將該文件寫入公共目錄。

但據我所知,這是不可能與Heroku。可以寫入/ tmp目錄,但在一個請求 - 響應週期方面,文件的有效期限爲seems to be defined,而不是後臺作業。

我想用S3來託管下載文件。 S3 gem確實支持流式上傳,但只適用於本地文件系統中已存在的文件。看起來內容大小需要預先知道,這在我的情況下是不可能的。

所以這看起來像一個catch-22。我試圖避免在上傳到S3時在內存中創建一個巨大的字符串,但S3僅支持本地文件系統上已存在的文件的流式上載。

鑑於Rails應用程序中我無法寫入本地文件系統,如何提供每天生成的大文件而不在內存中創建大字符串?

+0

我正面臨同樣的問題。我還沒有解決它,但我假設我可以寫入我的delayed_job工作器上的/ tmp文件系統,並且它會堅持足夠長的時間將文件上傳到S3。有興趣聽到人們的建議! – 2009-10-26 17:33:09

回答

10

${RAILS_ROOT}/tmp(不是/ tmp目錄,它在應用程序的目錄)持續的過程的持續時間。如果您正在運行後臺DJ,則TMP中的文件將持續該過程。

實際上,這些文件將會持續更長時間,我們說不能保證可用性的原因是tmp不能在服務器之間共享,並且每個作業/進程都可以基於雲負載在不同的服務器上運行。作爲工作的一部分,您還需要確保刪除文件。

- 另一位Heroku員工

+0

@teich,這很合理 - 謝謝! – 2009-10-26 21:02:20

3

Rich,

您是否嘗試將文件寫入./tmp,然後將文件傳輸到S3?

-Blake Mizerany(Heroku的)

+0

@Blake,我還沒有嘗試過,因爲/ tmp目錄(上面鏈接)上的Heroku文檔說(從我可以告訴的)目錄的內容將在一個請求期間生存。我會做的是在背景工作的背景下,這似乎是在尋求麻煩。如果我錯了,那麼很好 - 那會解決問題。 – 2009-10-26 18:39:56

相關問題