2012-10-31 19 views
0

我正在考慮實施將我的存儲庫中的某些文件同步到S3的Rake任務。問題在於我只想在更新文件時更新文件。因此,如果文件A被修改並且B保持不變,則只有文件A將在我的下一個應用程序部署期間同步到S3。將Rails回購中的文件同步到S3

什麼是確定文件已被修改的可靠方法?我正在考慮使用git來確定文件是否已在本地更改....是否有任何其他方式來執行此操作? S3是否提供類似的功能?

回答

3

S3目前不支持條件PUT s,這將是理想的解決方案,但您可以使用兩個請求來獲得此行爲。您的同步運行將類似於:

  • 對於要在S3上的每個文件:
    • 計算本地文件的MD5。
    • 發出一個HEAD請求該S3對象。
    • 如果對象的Content-MD5不同或對象不存在,請發出PUT請求。

這就是說,這聽起來很像東西,你會用資產做,在這種情況下,你是重新發明輪子。 Rails 3資產管道很好地解決了這個問題 - 特別是指紋資產並將哈希放在URL中允許您以非常長的max-age值爲它們服務,因爲它們是不可變的 - 且asset_sync gem已經可以將您的資產置於S3自動。

+0

我保證在發送HEAD請求時從S3取回MD5?我沒有看到當我捲曲 – denniss

+0

如果你在PUT請求中提供一個,那麼是的。目前,S3還使用MD5作爲對象的「Etag」,但可以想象,這種行爲將來會改變。 – willglynn

0

刪除的文件怎麼樣?最簡單的方法就是用最新的方式來轟炸整個目錄。

+0

我想依賴文件的'modified-since'標頭,以便我的客戶端知道何時或不需要拉取文件。 – denniss