2012-11-10 76 views
1

我正在使用cloudfoundry。我上傳文件並保存文件..我的例程返回路徑和文件名Cloudfoundry [Cloudfoundry] File.open ruby​​ rails resque class

/var/vcap/data/dea/apps/Dwarfquery-0-99065f0be8880d91916257931ed91162/app/tmp/region1-legends10-11-2012- 20:53.xml

但是它試圖用它來File.Open閱讀計劃resque程序返回以下錯誤

變量Errno :: ENOENT 錯誤 沒有這樣的文件或目錄 - 在/ var/VCAP /數據/dea/apps/Dwarfquery-0-99065f0be8880d91916257931ed91162/app/tmp/region1-legends10-11-2012-20:53.xml

這是由上傳服務器返回的路徑...我已經添加需要在我的作業類頂部的「開放式URI」

發生故障的線路是

File.open(fpath「 r +')do | f |

其中fpath的文件/目錄返回錯誤

回答

1

我不精通的紅寶石在所有,但我只想澄清:

  • 是位是上傳和的Resque日常工作的一部分(Cloud Foundry意義上的相同「應用程序」)
  • 您是在嘗試在文件上傳完成後立即讀取文件嗎?特別是在應用程序已經/可能已經重新啓動之後?

這是重要的,因爲:

  1. 每一個「應用程序」有它自己的臨時文件夾,顯然一個應用程序無法訪問其他應用程序的文件系統。如果您使用多個「實例」部署應用程序,這也適用。每個實例都是一個獨立的進程,擁有自己的文件系統。
  2. 本地文件系統的存儲是短暫的,每一個應用程序重新啓動

如果您需要在應用程序之間訪問二進制數據,你將要使用某種類型的存儲(如蒙戈的GridFS的),才能在時間擦拭乾淨兩個應用程序都可以持續顯示。

+0

上傳它的位是ruby rails服務器應用程序。這啓動了一個resque例程,然後將解析150兆奇數XML文件和彈出式數據庫。然而,這個resque worker可能是另一個應用程序.... redis是主應用程序的一個服務,但worker命令是一個獨立的應用程序。我不認爲cloudfoundry允許工作人員成爲與服務器應用程序相同的實例 – user1815169

+0

此外,cloudfoundry允許您擁有工作人員創建的redis服務位,但無法從Redis服務器應用程序讀取文件,這看起來有點奇怪 – user1815169

+0

像Dropbox也許是一個解決方案..看起來像閱讀以下內容將有所幫助。 https://www.dropbox.com/developers/start/files#ruby。雖然沒有確認它在cloudfoundry上工作。沒有確認,如果它適用於cloudfoundry – user1815169