【问题标题】:How to pass arguments to Capistrano 3 tasks in deploy.rb如何将参数传递给 deploy.rb 中的 Capistrano 3 任务
【发布时间】:2014-02-05 22:36:20
【问题描述】:

Here 是一个教程如何将参数传递给 capistrano 3 任务。

namespace :task do
  desc 'Execute the specific cmd task'
  task :invoke, :command do |task, args|
    on roles(:app) do
      execute :cmd, args[:command]
    end
  end
end

可以执行:

$ cap staging "task:invoke[arg]"

如何在我的 deploy.rb 中使用它?以下不起作用。

before :started, "task:invoke[arg]"

【问题讨论】:

    标签: capistrano capistrano3


    【解决方案1】:

    不确定before/after,但使用Capistrano 3,您始终可以使用rake 语法并从另一个任务中调用任务:

    Rake::Task["mynamespace:mytask"].invoke(arg)
    

    【讨论】:

      【解决方案2】:

      你可以使用invoke方法:

      before :started, :second_param do
        invoke 'task:invoke', 'arg'
      end
      

      还有一件事可能会有所帮助,capistrano 和 rake 只允许第一次执行任务,这可能是带有参数的任务的常见问题,因为您可能会以不同的值重用它。要允许这样做,您需要重新启用该任务:

      namespace :task do
        desc 'Execute the specific cmd task'
        task :invoke, :command do |task, args|
          on roles(:app) do
            execute :cmd, args[:command]
            task.reenable                # <--------- this how to re-enable it
          end
        end
      end
      

      【讨论】:

      • 在第一个示例中使用 Capistrano v3 会返回“错误数量的参数(1 代表 2+)”。
      • 你能举个例子吗? “它在我的机器上工作”:)
      • 在最新的 Capistrano master 上,deploy.rb 的底部:``` 在 "deploy:updated" 之前执行 #command here end ```
      • 好的,我已经检查过了,你在“之前”接受参数是对的,但要点是“调用”工作正常。检查正确的答案。
      • 谢谢。我还不清楚什么,第二个参数的含义是什么? API 文档将其称为“先决条件”,它似乎被用作此匿名任务的名称:rubydoc.info/github/capistrano/capistrano/Capistrano/…
      猜你喜欢
      • 2015-02-14
      • 1970-01-01
      • 2012-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-18
      • 2014-08-23
      • 2018-10-19
      相关资源
      最近更新 更多