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

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

例如:

task :foo do
  # stuff
end

task :bar do
  # INVOKE :foo
end

【问题讨论】:

    标签: ruby-on-rails capistrano


    【解决方案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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-03-24
          • 1970-01-01
          • 2013-12-05
          • 2017-03-29
          • 2013-07-16
          • 1970-01-01
          • 2018-05-14
          相关资源
          最近更新 更多