2015-08-19 3 views
2

Я начал создавать набор задач Rake (мой первый раз с ограниченным опытом Ruby), и когда я запускаю первую задачу, используя либо rake test, либо rake db, из командной строки я получаю два выхода, хотя там это только один файл в соответствующем каталоге.Rake запускает функцию дважды

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 первый.

EDIT побежал 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 работает в два раза, как представляется, здесь? Что мне не хватает? Я сделал что-то не так?

ответ

4

Проблема заключается в том, что вы добавляете foo.db к files FileList дважды:

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

Поскольку FILES (который вводит в заблуждение имя переменной) включает в себя "db", на первой линии вы добавляете *.* в files и на второй строке вы добавляете *.db в files.

Непонятно, почему у вас есть две линии, так как первая строка добавит каждый файл в каталог, поэтому вторая строка добавит только те файлы, которые вы уже добавили.

+1

* ударил лоб * Я полностью пропустил это @ Йордан. Я думал, что ограничу расширения файлов, которые могут быть включены, поэтому я переписал и сделаю это только один раз. Я также переименую эту переменную, чтобы отразить, что это расширения файлов. –

Смежные вопросы