为Capistrano任务创建一个通用方法

时间:2012-08-20 20:01:52

标签: ruby capistrano

假设我的标准deploy.rb文件中有一组命名空间。我有一个常见的任务,根据我传递给它的变量列出RPM包。当我按原样运行时,它抱怨capture是一个未定义的方法。如果我在deploy.rb文件中包含该方法,它就可以正常工作。

请注意,我是ruby和OOP的新手,所以我确信我的做法是错误的。 : - )

deploy.rb

load 'config/module'

namespace :lp_app do
desc "LP tasks"

co = Tasks::Commands.new()

    task :list do
        co.list_pkg("LP")
    end
end

module.rb

module Tasks
    class Commands
        def list_pkg(component)
            File.open("#{component}.file.list", "r").each_line do |line|
                pkg_name = "#{line}".chomp

                set :server_pkg, capture("rpm -q #{pkg_name}")

                puts "#{server_pkg}"
            end
        end
    end
end

1 个答案:

答案 0 :(得分:0)

您正尝试在Capistrano之外使用Capistano特定命令。如果要将变量设置为在命令行上运行的结果,请尝试使用反引号(`)。

module Tasks
    class Commands
        def list_pkg(component)
            File.open("#{component}.file.list", "r").each_line do |line|
                pkg_name = "#{line}".chomp

                server_pkg = `rpm -q #{pkg_name}`

                puts server_pkg
            end
        end
    end
end