我想用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: 'marcus@bitzl.com', syncDest: true } } } }); grunt.loadNpmTasks('grunt-rsync'); }
请注意,我使用marcus
和chmod=777
的marcus
只是为了简化testing。
运行grunt rsync
失败:
Running "rsync:production" (rsync) task rsyncing ./example.com >>> /home/marcus/bitzl.com Shell command was: rsync ./bitzl.com marcus@bitzl.com:/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.
但是,从上面运行rsync命令没有Grunt工作正常:
rsync ./bitzl.com marcus@bitzl.com:/home/marcus/bitzl.com --rsh ssh --recursive --delete --delete-excluded --exclude=*.git --exclude=node_modules --verbose --chmod=777
Rsync提供我的公钥密码(通过Grunt它不),同步就像一个微风。
服务器上的validation通过公钥(使用密码)工作。 密码authentication也可以。
我的猜测是,密码promt破坏和rsync失败,协议错误( 退出代码12 )。
我错过了让grunt-rsync在Windows上工作?
更新:
从Linux虚拟机(Ubuntu 12.04通过Virtualbox / Vagrant),它的工作原理就像所期望的那样。
原来是grunt-rsync中的一个bug。 我为rsyncwrapper填充的拉取请求已被接受,并且最近版本的grunt-rsync一切正常。
如果仍然遇到问题,请确保至少安装了grunt-rsync版本0.6.0。