假设我的标准deploy.rb
文件中有一组命名空间。我有一个常见的任务,根据我传递给它的变量列出RPM包。当我按原样运行时,它抱怨capture
是一个未定义的方法。如果我在deploy.rb
文件中包含该方法,它就可以正常工作。
请注意,我是ruby和OOP的新手,所以我确信我的做法是错误的。 : - )
load 'config/module'
namespace :lp_app do
desc "LP tasks"
co = Tasks::Commands.new()
task :list do
co.list_pkg("LP")
end
end
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
答案 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