【问题标题】:Using GIT and a CDN for static content使用 GIT 和 CDN 处理静态内容
【发布时间】:2012-12-10 00:14:43
【问题描述】:
问题:
我有一个使用 GIT 部署的应用程序。当我想更新服务器上的文件时,我会执行一个简单的git pull 以从 GitHub 存储库获取最新版本的应用程序。问题是我有点想从我的 Amazon S3 帐户提供所有静态内容,但希望这些文件与主服务器上的版本同步。
问题:
- 当我从 GitHub
git pull 我的项目时,如何将这些文件提取到我的 S3 帐户?
- 如果我想在我的服务器上切换版本(通过标签),如何将其镜像到我的 S3 帐户?
【问题讨论】:
标签:
git
version-control
amazon-s3
cdn
【解决方案1】:
啊,欢迎来到内容版本控制的世界。
这不是 GIT 问题,而是在尝试将从一个位置提供的静态内容同步到从另一个位置提供的版本化内容(来自源代码控制)时的一个常见问题。
一个常见的用例是同时包含动态和静态内容的网站。
一个随机的例子是hotels.com。如果您检查首页上的图片,您将看到诸如this one 之类的 URL。显然,这个资源的名称是由Asset Manager 自动生成的。
我们将 Django 和 Python 用于某些任务,因此使用了Django Mediagenerator。
我们生成一个以版本命名的静态文件目录,并将其上传到 S3。
正如您从this comparison 看到的那样,还有很多其他选择!
作为使用资产管理器的奖励,您还可以获得压缩、混淆、合并等功能。
在应用程序的不同部分,我们手动对文件进行版本控制。我自动计算文件哈希的python模块(每个静态文件的哈希)。我将静态文件上传到 S3,同时重命名文件以附加其内容的 MD5 哈希。这样 some_file.txt 在 S3 上变成 some_file_123123123123.txt ,我可以从 S3 下载文件的特定版本。带有哈希的模块存储在源代码控制 (GIT) 中。
【解决方案2】:
我认为,Git hooks 应该做你想做的事。也许结帐后(用于切换标签)或合并后(用于拉取)就足够了。然后,您必须编写一个 bash 脚本,它将您的静态文件复制到您的 S3 并在挂钩中执行该 bash 脚本。