2017-05-06 78 views
0

如果我有我的Rake文件定义的任务,看起来像这样:有没有办法将后期绑定放入/日志记录附加到耙子任务?

MyLibrary::CopySrcTask.new(:copySrc) do |task| 
    puts "Copying source" 
    task.src_dir = 'src/' 
    task.destination = 'build/lib/' 
end 

我已经认识到,在上述任务puts得到执行,即使我指定其中一个耙子目标该:copySrc任务是不是执行。我想知道是否有办法以后期绑定的方式指定puts,这样只有当/当rake任务本身执行时才会执行它。

这似乎不是什么大不了的,但肯定会允许更容易调试,而且,当你考虑这样的情况下,它变成一个更大的交易:在这种情况下

MyLibrary::CopySrcTask.new(:copySrc) do |task| 
    task.src_dir = complex_function_which_affects_filesystem() 
    task.destination = 'build/lib/' 
end 

现在,它与puts实质上是相同的问题,即使该任务没有运行,但现在,而不是只是一个多余的puts调用,它正在做一些整个操作,弄乱了文件系统。有什么办法可以使任务初始化中的所有代码只在任务本身执行时才执行?

如果像这样的工作,这将是巨大的:

MyLibrary::CopySrcTask.new(:copySrc) do |task| 
    lambda do # this code will only be run if the task gets run 
    puts "Copying source" 
    task.src_dir = complex_function_which_affects_filesystem() 
    task.destination = 'build/lib/' 
    end 
end 

我要指出,我使用的任务是从图书馆,所以我不能只是编辑的任务本身。

回答

0

这是解决/劈我发现,似乎工作:

task :copySrc do |t| 
    MyLibrary::CopySrcTask.new(:internalCopySrc) do |task| 
    puts "Copying source" 
    task.src_dir = complex_function_which_affects_filesystem() 
    task.destination = 'build/lib/' 
    end 
    Rake::Task[:internalCopySrc].invoke 
end 

结束语每个库的任务在另一个任务,然后手动调用子任务......这不是很漂亮,但它的工作原理。

相关问题