我开始创建一组Rake任务(我第一次使用有限的Ruby经验),当我运行第一个任务时,使用rake test
或rake 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
运行两次,因为它似乎在这里做?我错过了什么?我做错了什么?
答案 0 :(得分:4)
问题在于您将foo.db
添加到files
FileList两次:
files.include Dir.glob("#{src}/*.*")
FILES.each {|ext| files.include "#{src}/*.#{ext}"}
由于FILES
(这是一个误导性的变量名称)包含"db"
,因此您可以在第一行将*.*
添加到files
和第二行您已将*.db
添加到files
。
不清楚为什么你有这两行,因为第一行会添加目录中的每个文件,所以第二行只会添加你已添加的文件。