如何从另一个调用 Capistrano 任务?

Posted

技术标签:

【中文标题】如何从另一个调用 Capistrano 任务?【英文标题】:How do I invoke one Capistrano task from another? 【发布时间】:2011-05-19 07:58:25 【问题描述】:

例如:

task :foo do
  # stuff
end

task :bar do
  # INVOKE :foo
end

【问题讨论】:

【参考方案1】:

记录在案:在 Capistrano 3 中,使用 invoke(),例如

desc "Task that does something"
task :do_something do
  invoke 'namespace:task'
end

更多https://github.com/capistrano/capistrano#before--after

【讨论】:

请注意:invoke 必须直接在task 内,不能在onwithin 或其他块内。否则将无法正常工作。 如何在另一个任务的块中重用一个任务? @aspiringCodeArtisan,其中一个用例是为一系列小任务创建一般任务。【参考方案2】:

你可以使用命名空间来做到这一点:

namespace :test do
  task :one do
  end
  task :two do
    test.one
    #or just directly call it:
    one
  end
end

请注意您使用的名称,不要覆盖某些重要功能。

【讨论】:

那么为什么这不起作用呢? task :d, :roles => [:app] do deploy end 附注:您不应该使用 test 命名空间,因为它会影响具有该名称的现有 Capistrano 方法。你会得到一个 ArgumentError 提出。 是的,抱歉,这只是示例,我假设您会选择一些更有意义的命名空间。【参考方案3】:

通常你通过定义依赖来做到这一点:

before :bar, :foo

【讨论】:

【参考方案4】:

你也可以使用Rake::Task["namespace:task"].invoke,这行得通

【讨论】:

【参考方案5】:

如果任务位于另一个命名空间中,您可以改用find_and_execute_task

【讨论】:

以上是关于如何从另一个调用 Capistrano 任务?的主要内容,如果未能解决你的问题,请参考以下文章

如何运行 db:migrate 从另一个带参数的 rake 任务?

使用 Rails 为 capistrano 3.8.0 运行“cap production deploy”时不知道如何构建任务“start”

Capistrano 3 须藤任务

Capistrano & Bash:忽略命令退出状态

如何从另一个类中的一个类调用 setter 函数?

如何在一个文件中定义 C 函数,然后从另一个文件中调用它?