如何从另一个调用 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
内,不能在on
、within
或其他块内。否则将无法正常工作。
如何在另一个任务的块中重用一个任务?
@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”