[英]grunt/npm plugin grunt-s3 + knox not uploading to S3
我正在嘗試將S3部署步驟集成到我的Grunt工具鏈中,以將新生成的文件上傳到AWS。 但是,該步驟總是默默地失敗(聲稱可以成功,但是什么也不做),並且在調試結果時,我發現了掛起過程中的一些不同點。 我使用grunt-s3作為處理grunt命令的程序包,該程序又調用包裝了Amazon S3 API的knox程序包。
這是事情崩潰的地方:
1)邏輯上有一個觀點,即knox使用fs包嘗試通過fs.stat(file,callback)獲取將要上傳的文件的大小。 據我所知,該進程死在fs.stat調用與被調用的回調之間的node.js層下。 我在回調邏輯的各處都設置了斷點和'debugger'語句,並且在調用fs.stat()之后,node-inspector和IntelliJ調試器似乎都無法捕獲該過程。
2)如果我修改了knox插件並將fs.stat調用更改為fs.statSync(),則該過程將成功進行。 但是,在此過程的稍后部分,我可以看到knox使用S3設置了預期的PUT URL以上傳文件,然后調用stream.pipe()來上傳文件。 stream.pipe()調用似乎沒有任何結果,而且我在WireShark上看不到任何表明計算機與AWS之間發生上載的活動。 但是,如果我使用命令行工具s3cmd進行上傳,則文件上傳正常。
我准備放棄此步驟而直接使用s3cmd,但是如果可能的話,我很樂意采用這種方法。 任何人都對這兩個步驟中可能發生的事情有任何建議?
謝謝!
你坐在我的代理后面嗎? 如果是這樣,諾克斯將無法正常工作。 如果沒有,您的s3-config看起來如何?
另一個需要注意的重要事項是您的存儲桶的位置。 手動設置區域(在我的示例中為“ eu-west-1”)對我有所幫助,因為knox默認將區域設置為“我們標准”。 在此處查看可能值的列表,檢入您的存儲桶屬性,然后手動設置該值!
這里(對我來說)工作配置:
s3: {
options: {
key: "my-key",
secret: "my-secret",
access: "public-read",
bucket: "my-bucket",
region: "eu-west-1"
},
mysubtask: {
upload: [
{
src: "src/*.js",
dest: "/dist/",
gzip: true,
headers: {
'Content-Type': 'application/javascript; charset=utf-8'
}
}
]
}
}
我建議使用aws cli
api來實現這一目標。 您要做的就是配置aws cli
和grunt-shell
設置后,您可以使用Shell命令來同步文件。 檢查下面的代碼片段
/**
* Commands for copying assets from local to s3 bucket.
* here we are using `aws s3 sync` command instead of `aws s3 cp`
*/
let commands = [
'echo "####### sync started #######"',
'aws s3 sync ./www s3://bucketName/path --acl public-read',
'echo "####### sync completed #######"'
];
/**
* Invalidate cache only when env is production
*/
if(env === "production") {
commands.push('echo "####### cache invalidation started #######"');
commands.push('aws cloudfront create-invalidation --distribution-id {distribution_id} --paths "/*"');
}
grunt.config.set("shell", {
s3sync: {
command: commands.join('&&')
}
});
grunt.loadNpmTasks('grunt-shell')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.