2015-08-19 52 views
2

我開始創建一組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中,只有被複制一次,或者第二個副本覆蓋 fi第一個。

編輯運行命令行

** 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                

rake test --trace是它執行:db然後:test?或者:db運行兩次,因爲它似乎在這裏做?我錯過了什麼?我做錯了什麼?

回答

4

的問題是,您要添加foo.dbfiles文件清單兩次:

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

因爲FILES(這是一個誤導性的變量名)包括"db",你要添加*.*files第一線並在第二行添加*.dbfiles

不清楚你爲什麼同時擁有這兩行,因爲第一行會添加目錄中的每個文件,因此第二行只會添加已添加的文件。

+1

*打了額頭*我完全錯過了@Jordan。我想我會限制可能包含的文件的擴展名,所以我會重寫並且只做一次。我還會重命名該變量以反映它是文件擴展名。 –