使用GIT和CDN获取静态内容

时间:2011-11-04 09:46:59

标签: git version-control amazon-s3 cdn

问题:

我有一个使用GIT部署的应用程序。当我想更新服务器上的文件时,我会做一个简单的git pull来从GitHub仓库获取最新版本的应用程序。问题是我想要从我的Amazon S3帐户提供所有静态内容,但希望这些文件与主服务器上的版本保持同步。

问题:

  1. 当我从GitHub git pull我的项目时,如何将这些文件提取到我的S3帐户?
  2. 如果我想在我的服务器上切换版本(通过标签),那么如何在我的S3帐户上镜像呢?

3 个答案:

答案 0 :(得分: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)中。

答案 1 :(得分:1)

我认为,Git hooks应该做你想做的事。也许post-checkout(用于切换标签)或合并后(用于拉动)就足够了。然后,您必须编写一个bash脚本,将静态文件复制到S3并在钩子中执行该bash脚本。

答案 2 :(得分:0)

如果您将PHP用于您的应用程序,您可能会觉得这很有用(否则此代码可以根据您的需要进行调整): https://github.com/SupersonicAds/git-hook-php-s3-files-revisions