Rake 运行函数两次

Rake runs function twice

我开始创建一组 Rake 任务(我的第一次,Ruby 经验有限),当我 运行 第一个任务时,使用 rake testrake db,即使相关目录中只有一个文件,我从命令行得到两个输出。

rakefile.rb

require 'fileutils'

FILES    = ["html", "css", "js", "svg", "otf", "eot", "ttf", "woff", "jpeg", "map", "ico", "map", "png", "db"]

desc 'test script'
task :test => [:db]

task :db do
    copy_to 'data/', 'c:/xampp/htdocs/home/shared/data'
end

def copy_to(dest, src)

    files = FileList.new()
    files.include Dir.glob("#{src}/*.*")
    FILES.each {|ext| files.include "#{src}/*.#{ext}"}
    files.each do |src|
        puts "copying: #{src} to #{dest}"
        FileUtils.cp src, dest
    end

end

输出

(in C:/xampp/htdocs/home/gateway)                        
copying: c:/xampp/htdocs/home/shared/data/foo.db to data/   
copying: c:/xampp/htdocs/home/shared/data/foo.db to data/   

当我执行 rake -T 时,我得到以下结果(这是我所期望的):

(in C:/xampp/htdocs/home/gateway)
rake test  # test script

当然foo.db只复制一次,否则第二次复制覆盖 第一个。

编辑 运行 rake test --trace 来自命令行

** Invoke test (first_time)                                                   
** Invoke db (first_time)                                                     
** Execute db                                                                 
copying: c:/xampp/htdocs/home/shared/data/foo.db to data/ 
copying: c:/xampp/htdocs/home/shared/data/foo.db to data/ 
** Execute test                                                               

是否执行:db然后然后:test?或者 :db 运行ning 是这里显示的两倍?我错过了什么?我是不是做错了什么?

问题是您将 foo.db 添加到 files FileList 两次:

files.include Dir.glob("#{src}/*.*")
FILES.each {|ext| files.include "#{src}/*.#{ext}"}

因为 FILES(这是一个误导性的变量名)包含 "db",所以在第一行您要将 *.* 添加到 files 并在第二行您要将 *.db 添加到 files

不清楚为什么你有这两行,因为第一行会添加目录中的每个文件,所以第二行只会添加你已经添加的文件。