2012-08-29 45 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 

另一种方式更清洁。

相关问题