1

这是我的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

我怎样才能做到这一点?

4

1 回答 1

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

另一种方式更清洁。

于 2012-09-07T23:51:06.870 回答