【问题标题】:Using rake import (calling other rakefiles)使用 rake import(调用其他 rakefile)
【发布时间】:2011-05-29 04:56:27
【问题描述】:

这是我的主要 rake 文件

subrake = 'subrake'

task :init => [subrake] do
  #call subrake.build
end

import subrake

我看到了有关上述步骤如何工作的文档,但我不知道如何在其他 subrake 文件中调用任务。顺便说一句,这些任务可能与我的同名,这是个问题吗?

【问题讨论】:

    标签: ruby import rake rakefile


    【解决方案1】:

    我想我的答案迟到了,但我刚才也有同样的问题。所以这个解决方案可能对某人有用。

    Rakefile.rb

    subrake = 'subrake'
    
    task :default => :init
    
    task :init => ["#{subrake}:init"] do
      Rake::Task["#{subrake}:build"].invoke
    end
    
    require "#{Dir.pwd}/#{subrake}"
    

    subrake.rb

    namespace :subrake do
    
      desc "Init"
      task :init do
        puts 'Init called'
      end
    
      desc "Build"
      task :build do
        puts 'Build called'
      end
    
    end
    

    我猜代码本身描述得很好,但我想停下来。当您调用 require 时,您应该为 subrake 文件提供完整路径(如在我的示例中)或“.\subrake”(如果它位于工作目录中) )

    【讨论】:

      【解决方案2】:

      如果您有多个子 rake 文件,您可以执行类似的操作

      Dir.glob('**/*.rake').each { |r| import r}
      
      task :init => ["subrake:init"] 
      

      你可以有一个看起来像这样的 sub.rake 文件

      namespace :subrake do
        desc "Init"
        task :init do
          puts 'Init called'
        end
      end
      

      还有另一个 foo.rake 文件

      namespace :foorake do
        desc "Init"
        task :init do
          puts 'Init called'
        end
      end
      

      你可以像这样从 shell 调用 foorake:init

      #rake foorake:init
      

      或将其添加到您的主要任务中

      task :init => ["subrake:init", "fforake:init"]
      

      【讨论】:

      • 我喜欢这个答案,因为它感觉更接近 Minitest 和 RSpec 的工作方式,以及搜索某些类型的文件。
      猜你喜欢
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-25
      • 2016-12-31
      • 2019-01-10
      • 2015-02-02
      相关资源
      最近更新 更多