【问题标题】:Capistrano getting commandline optionsCapistrano 获取命令行选项
【发布时间】: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


    【解决方案1】:

    这取决于您的 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] 
    

    第一个参数是目标主机名。

    【讨论】:

    • 谢谢您的回复先生,cap命令选项怎么样?我需要得到这个 -z, --hosts HOSTS
    • 您不能在 Capistrano 中使用标志,您必须将其作为参数传递。我正在更新我的答案以涵盖您的示例。
    【解决方案2】:

    参考:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-24
      • 1970-01-01
      • 2014-01-28
      • 1970-01-01
      • 1970-01-01
      • 2012-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多