【发布时间】:2019-11-12 05:56:51
【问题描述】:
有没有办法在执行命令任务时获取命令行选项?
例如。
cap staging namespace:task -z target_host
我会尝试命令行参数(ARGV),但长度仅为 2,用于 ["staging", "namespace:task"] 我想获取 -z(--HOST 选项)。
【问题讨论】:
标签: ruby-on-rails regex ruby capistrano
有没有办法在执行命令任务时获取命令行选项?
例如。
cap staging namespace:task -z target_host
我会尝试命令行参数(ARGV),但长度仅为 2,用于 ["staging", "namespace:task"] 我想获取 -z(--HOST 选项)。
【问题讨论】:
标签: ruby-on-rails regex ruby capistrano
这取决于您的 Capistrano 版本。
如果您使用的是版本 3,这里是解释它的博客文章:https://jtway.co/capistrano-3-passing-parameters-to-your-task-e22cc9f659c3。
基本上你传递参数就像你对 rake 任务做的那样,所以在括号之间传递它们 ([]):
cap staging mynamespace:mytask[argument1,argument2]
然后在你的任务中,你可以像这样捕捉它们:
namespace : mynamespace do
desc 'Description of my task here'
task :mytask do |task, args|
puts "Arguments: #{args.inspect}"
end
end
在您的示例中,您必须以这种方式执行 Capistrano:
cap staging namespace:task[target_host]
第一个参数是目标主机名。
【讨论】:
参考:
https://stackoverflow.com/a/21446021/12359143 https://github.com/capistrano/capistrano/blob/master/lib/capistrano/configuration/host_filter.rb
Capistrano::Configuration::HostFilter.class_eval do
def filter(servers)
Array(servers).select { |s| @rex.match s.to_s }
end
end
【讨论】: