【发布时间】:2018-03-20 15:43:03
【问题描述】:
我尝试运行以下代码,但结果 index.js 已损坏。
知道为什么吗?
gzip dist/production/index.js
mv dist/production/index.js.gz dist/production/index.js
s3cmd --access_key="$S3_ACCESS_KEY" --secret_key="$S3_SECRET_KEY" \
--acl-public --no-mime-magic --progress --recursive \
--exclude "dist/production/index.js" \
put dist/production/
"s3://${BUCKET}/something/${BUILD_IDENTIFIER}/production/" &
s3cmd --access_key="$S3_ACCESS_KEY" --secret_key="$S3_SECRET_KEY" \
--acl-public --no-mime-magic --progress --recursive \
--add-header="Content-Encoding:gzip" \
put dist/production/index.js
"s3://${BUCKET}/something/${BUILD_IDENTIFIER}/production/" &
wait
请注意两个命令末尾的&,它可以将两个并行上传到同一位置。
编辑:
它可以很好地工作,而不会使进程并行化并使它们在后台运行。我想让这个过程更快,所以我在上传其他文件的同时上传了沉重的 gzip 压缩 index.js。
编辑2:
我在上传的 index.js 中得到的是这样的乱码:
��;mS�H���W �7�i"���k��8̪
编辑3:
看起来问题在于我如何使用排除。它相对于上传的文件夹而不是工作目录排除。
--exclude "dist/production/index.js" ==> --exclude index.js
修复它。
【问题讨论】:
-
如果你不把这两个调用放在后台,这会做你想要的吗?
-
是的。它工作正常。我试图让它更快但并行化它们。用这个信息编辑了我的问题。
-
我不使用 s3cmd,但似乎人们努力并行运行它的一个原因是因为它很慢。解决方案通常很简单,不使用 s3cmd,而是使用 awscli 或 s3-cli。也相关:stackoverflow.com/questions/26934506/…
-
如果您使用扩展名
.js命名压缩文件,您会招来麻烦 - 请不要这样做。 -
@VitalikZaidman 看起来
--exclude "dist/production/index.js"并没有达到你的预期。以相反的顺序执行这两个命令,而不是并行执行,您应该会发现相同的“损坏”行为。也许正确的论点是--exclude index.js,因为上传植根于./dist/production/。
标签: bash amazon-web-services amazon-s3 parallel-processing