Rakefile - 对任务的参数和目录依赖性

时间:2015-01-08 03:59:03

标签: ruby rake rakefile

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

$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中的多个其他任务中使用它?

1 个答案:

答案 0 :(得分: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