Rake运行两次

时间:2015-08-19 17:48:01

标签: ruby rake rakefile

我开始创建一组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运行两次,因为它似乎在这里做?我错过了什么?我做错了什么?

1 个答案:

答案 0 :(得分:4)

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

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

由于FILES(这是一个误导性的变量名称)包含"db",因此您可以在第一行将*.*添加到files和第二行您已将*.db添加到files

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