2015-01-08 32 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的整體相比)?這似乎很奇怪... –