【问题标题】:Creating a common method for Capistrano tasks为 Capistrano 任务创建通用方法
【发布时间】:2012-08-20 20:01:52
【问题描述】:

假设在我的标准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

【问题讨论】:

    标签: ruby capistrano


    【解决方案1】:

    您正在尝试在 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
    

    【讨论】:

      猜你喜欢
      • 2019-12-18
      • 1970-01-01
      • 2011-03-24
      • 1970-01-01
      • 2022-12-11
      • 2014-05-02
      • 1970-01-01
      • 2021-01-06
      • 2014-03-16
      相关资源
      最近更新 更多