0

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

请注意,我是 ruby​​ 和 OOP 的新手,所以我确定我这样做是错误的。:-)

部署.rb

load 'config/module'

namespace :lp_app do
desc "LP tasks"

co = Tasks::Commands.new()

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

模块.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
4

1 回答 1

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
于 2012-08-21T01:16:51.033 回答