当我在结束时调用shell:clean
时,它似乎在~/tmp/<domain>
任务完成之前删除了shell:sync
目录。我丢失了目的地~/www/versions/<domain>
中的文件。
shell:sync
任务执行rsync
命令将文件从~/tmp
复制到~/www
。
grunt.registerTask('deploy', 'Deploy web app', function(){
grunt.task.run('shell:create_temp');
//create version directories
grunt.task.run('shell:create_version');
grunt.task.run('shell:sync');
//create symlink to live site
grunt.task.run('shell:symlink');
grunt.task.run('shell:clean');
});
这是配置:
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
cfg: _.extend(grunt.file.readJSON('config.json'), grunt.file.readJSON('config.'+env+'.json'), { env: env }),
version_path: '<%= cfg.www_dir %>/versions/<%= cfg.domain %>@<%= pkg.version %>',
tmp_site_path: '<%= cfg.tmp_dir %>/<%= cfg.domain %>',
live_path: '<%= cfg.www_dir %>/<%= cfg.domain %>',
shell: {
create_temp: {
command: 'mkdir -p <%= tmp_site_path %>',
options: {
stdout: true,
stderr: true
}
},
create_version: {
command: 'mkdir -p <%= version_path %>',
options: {
stdout: true,
stderr: true
}
},
sync: {
command: 'rsync -avz --delete --progress <%= tmp_site_path %>/ <%= version_path %>/',
options: {
stdout: true,
stderr: true
}
},
symlink: {
command: 'rm <%= live_path %>; ln -sv <%= version_path %> <%= live_path %>',
options: {
stdout: true,
stderr: true
}
},
clean: {
command: 'rm -rf <%= tmp_site_path %>',
options: {
stdout: true,
stderr: true
}
}
}
});
答案 0 :(得分:2)
通常任务同步运行。但是一个插件可以绕过这个 - 这也可能是插件中的一个错误。
但请注意,您通常会以这种方式结合使用:
grunt.registerTask("deploy", [
'shell:create_temp',
'shell:create_version',
'shell:sync',
'shell:symlink',
'shell:clean'
]);
答案 1 :(得分:0)
您可能想查看grunt-bg-shell。它允许您指定任务完成运行时的回调。
bgShell: {
sync: {
cmd: 'rsync -avz --delete --progress <%= tmp_site_path %>/ <%= version_path %>/',
done: function () {
grunt.task.run('shell:clean');
}
}
}