如何在capistrano的另一个任务中添加任务

时间:2012-08-29 10:01:24

标签: ruby-on-rails ruby capistrano

这是我的deploy.rb,我有两个任务:

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

我该怎么做?

1 个答案:

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

另一种方式更清洁。