我想使用Grunt和rsync将一些代码从我的计算机(Windows)部署到服务器(Linux)。
我的Gruntfile.js
是
module.exports = function(grunt) {
grunt.initConfig({
rsync: {
options: {
args: ['--verbose', '--chmod=777'],
exclude: ['*.git', 'node_modules'],
recursive: true
},
production: {
options: {
src: './bitzl.com',
dest: '/home/marcus/bitzl.com',
host: '[email protected]',
syncDest: true
}
}
}
});
grunt.loadNpmTasks('grunt-rsync');
}
请注意,我使用
marcus
和chmod=777
的主目录只是为了简化测试。运行
grunt rsync
失败:Running "rsync:production" (rsync) task
rsyncing ./example.com >>> /home/marcus/bitzl.com
Shell command was: rsync ./bitzl.com [email protected]:/home/marcus/bitzl.com --rsh ssh --recursive --delete --delete-exc
luded --exclude=*.git --exclude=node_modules --verbose --chmod=777
ERROR
Error: rsync exited with code 12
Warning: Task "rsync:production" failed. Use --force to continue.
Error: Task "rsync:production" failed.
at Task.<anonymous> (D:\git\bitzl.com\node_modules\grunt\lib\util\task.js:200:15)
at null._onTimeout (D:\git\bitzl.com\node_modules\grunt\lib\util\task.js:236:33)
at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
Aborted due to warnings.
但是,在没有Grunt的情况下从上面运行rsync命令可以正常工作:
rsync ./bitzl.com [email protected]:/home/marcus/bitzl.com --rsh ssh --recursive --delete --delete-excluded --exclude=*.git --exclude=node_modules --verbose --chmod=777
Rsync提示输入我的公共(public) key 的密码(通过Grunt不会),并且像微风一样同步。
服务器上的身份验证通过公用 key (带有密码短语)进行。密码验证也可以。
我的猜测是,密码promt会以某种方式中断,并且rsync会因协议(protocol)错误(即exit code 12)而失败。
我缺少在Windows上运行grunt-rsync的功能吗?
更新:
从Linux VM(通过Virtualbox/Vagrant获得的Ubuntu 12.04)可以正常运行。
最佳答案
原来是grunt-rsync中的错误。我为rsyncwrapper填写的请求请求已被接受,并且使用最新版本的grunt-rsync,一切正常。
如果仍然遇到问题,请确保至少安装了grunt-rsync 0.6.0版。
关于windows - Windows客户端发出grunt-rsync失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23564277/