2015-01-08 17 views
0

我想在rakefile中使用shell命令干净地查找各种目录路径,将该值赋给变量,然后使用该变量创建目录(并在其他任务中使用)。我已将sh代码放入任务中,并使directory调用取决于任务(使用directory后的file调用)。但是,我无法在任务以外的任何地方使用该变量(即使使其成为全局变量)。Rakefile - 任务上的参数和目录依赖关系

$my_root = String.new 

task :find_path do 
    sh %{git rev-parse --show-toplevel} do |pass, res| 
     if ! pass 
     puts "git rev-parse failed, are you in a git repo? (status = #{res.exitstatus})" 
     else 
     $my_root = res 
     end 
    end 
end 

$MY_DIR  = "#{$my_root}/some/sub/dir" 

desc "Create MY_DIR directory" 
directory $MY_DIR 
file $MY_DIR => :find_pmc_path 

我得到以下错误:

mkdir -p /some/sub/dir 
rake aborted! 

当我进一步深入研究,在$ MY_DIR没有得到正确分配。如果我将该变量赋值放在任务中,则会出现undefined method 'length' for nil:NilClass错误。

如何查找信息,分配变量,并将其用于rakefile中的多个其他任务?

+0

进一步试验之后,我意识到,'SH '不返回命令的std_out结果。 –

回答

1

这似乎是一个很好的用例的namespace声明:

namespace :top do 
    mydir = 'my_root' 
    task :find_path do 
    puts mydir 
    end 

    task :delete do 
    puts mydir 
    end 
end 

find_task:

rake top:find_path 
=> my_root 

删除任务:

rake top:delete 
=>my_root 
+0

全局变量是否仅在命名空间中出现(与rakefile的整体相比)?这似乎很奇怪... –