2011-11-04 100 views
3

問題:使用Git和CDN靜態內容

我有部署使用Git的應用程序。當我想更新服務器上的文件時,我會執行一個簡單的git pull以從GitHub倉庫獲取最新版本的應用程序。事情是我想要從我的Amazon S3帳戶提供所有靜態內容,但希望這些文件與主服務器上的版本同步。

問題:

  1. 當我git pull從GitHub項目中,我怎麼能拉這些文件到我的S3帳戶?
  2. 如果我想在我的服務器上切換版本(通過標籤),那麼這怎麼會被鏡像到我的S3賬戶?
+0

你有沒有決定如何做到這一點? – tofutim

回答

1

我認爲,Git hooks應該做你想做的。也許post-checkout(用於切換標籤)或post-merge(用於拉出)就足夠了。然後您必須編寫一個bash腳本,它將您的靜態文件複製到S3中,並在鉤子中執行該bash腳本。

2

啊,歡迎到內容版本的世界。

這不是一個GIT問題,但實際上在嘗試將從一個位置提供的靜態內容同步到源自不同位置的版本化內容(來自源控件)時常見問題。
常用用例是一個包含動態和靜態內容的網站。
一個隨機的例子是hotels.com。如果您檢查首頁上的圖片,您將看到諸如this one的網址。顯然這個資源的名稱是由Asset Manager自動生成的。

我們對某些任務使用Django和Python,因此使用Django Mediagenerator。 我們生成一個我們上傳到S3的靜態文件的版本控制目錄。

this comparison可以看到,還有很多其他選項!
作爲使用資產經理的獎勵,您還可以獲得壓縮,混淆,合併等。

在應用程序的另一部分,我們手動版本化文件。我自動計算一個文件哈希的python模塊(每個靜態文件都有一個哈希)。我將靜態文件上傳到S3,同時重命名文件以附加其內容的MD5哈希。這樣some_file.txt在S3上變成some_file_123123123123.txt,我可以從S3下載該文件的特定版本。帶散列的模塊存儲在源代碼控制(GIT)中。