将Git Push到Amazon S3以部署资源?

7

你能在亚马逊上安装git并轻松地推送资产(js,css,img)吗?像Heroku这样的东西,但带有资产和S3将是很棒的。

一些人似乎使用JungleDisk将本地git目录与s3同步,但太笨重了。我尝试在Mac上安装jgit,但没有成功,而且那个东西看起来很古老。还有其他什么方法吗?或者这种类型的东西根本行不通?

我已经尝试过大多数用于heroku资产部署/优化的宝石,但它们要么要求您在heroku上托管它们,要么运行rake任务,这并不理想。

6个回答

6
您可以使用 s3cmd --sync LOCAL s3://BUCKET/PREFIX 命令来完成此操作。最好在每个资源的名称中都加上版本号。否则,您可能会遇到奇怪的问题,例如浏览器缓存了 CSS 的版本 1 并使用 JavaScript 的版本 2,导致未定义的行为。

它会同步只有更改的部分吗?比如说,如果我有100张图片,然后我在本地更改了1张图片,它只会上传这一张改动的图片,就像git一样。它会重新上传全部内容吗? - Lance
3
通常 Git 以散装对象格式存储数据,这意味着每个文件的每个版本都存储在自己的文件中。如果您在100兆字节的文件中更改一个字节,Git 将为这一字节的更改写入100兆字节。如果您使用"s3cmd sync"同步,100兆字节将被发送到 Amazon。以上说法只有在您告诉 Git 使用打包对象格式时才正确,而这不是默认设置。 - ceving
1
编辑:现在只需s3cmd sync ./ s3://Your-bucket,同步操作不再需要--标志。 - loujaybee

1

1
要不要设置一个EC2镜像,将s3镜像挂载在上面,并设置一个裸的git仓库,在该S3镜像上进行推送?

0
Jammit s3的问题在于您无法正确管理文件的版本。最新的JS/CSS文件可能需要一段时间才能到达最终用户手中。
如果您的应用程序使用PHP(否则可以根据您的需求进行调整),您可能会发现这很有用:https://github.com/SupersonicAds/git-hook-php-s3-files-revisions

0

0

唯一的问题是每次都会推送所有内容。因此,如果有很多图片,需要花费一些时间。如果它能够想出差异,那就太好了 :) - Lance

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接