2012-08-29 40 views
1

這是我deploy.rb,我有兩個任務:如何在另一個任務Capistrano的添加任務與

set :rpm_name,"" 
set :dir,"/tmp" 

task :rpminfo do 
     rpmofos1=capture("rpm -q #{rpm_name}") 
     new_test 
     puts "#{rpmofos1}"  
end 

task :new_test do 
     run "ls -ltr #{dir}" 
end 

我調用cap命令:

cap hostname rpminfo -s user=root -s dir=/root 

這對於工作正常,但我不想從命令行傳遞dir變量,而是我想將其作爲:

task :rpminfo do 
     rpmofos1=capture("rpm -q #{rpm_name}") 
     new_test -s dir=/var 
     puts "#{rpmofos1}" 
end 

我可以這樣做嗎?

回答

0

我會把new_test定義放在輔助方法中。

set :rpm_name,"" 
set :dir,"/tmp" 

task :rpminfo do 
     rpmofos1=capture("rpm -q #{rpm_name}") 
     new_test_helper("/var") 
     puts "#{rpmofos1}"  
end 

def new_test_helper(path) 
    run "ls -ltr #{path}" 
end  

task :new_test do 
    new_test_helper(dir) 
end 

但是,如果你不喜歡這樣的想法,你還可以設置臨時變量調用子任務之前。

set :rpm_name,"" 
set :dir,"/tmp" 

task :rpminfo do 
     rpmofos1=capture("rpm -q #{rpm_name}") 
     old_dir = dir 
     set :dir, "/tmp" 
     new_test 
     set :dir, old_dir 
     puts "#{rpmofos1}"  
end 

task :new_test do 
     run "ls -ltr #{dir}" 
end 

另一種方式更清潔。

相關問題