Rake 运行函数两次
Rake runs function twice
我开始创建一组 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
运行ning 是这里显示的两倍?我错过了什么?我是不是做错了什么?
问题是您将 foo.db
添加到 files
FileList 两次:
files.include Dir.glob("#{src}/*.*")
FILES.each {|ext| files.include "#{src}/*.#{ext}"}
因为 FILES
(这是一个误导性的变量名)包含 "db"
,所以在第一行您要将 *.*
添加到 files
并在第二行您要将 *.db
添加到 files
。
不清楚为什么你有这两行,因为第一行会添加目录中的每个文件,所以第二行只会添加你已经添加的文件。
我开始创建一组 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
运行ning 是这里显示的两倍?我错过了什么?我是不是做错了什么?
问题是您将 foo.db
添加到 files
FileList 两次:
files.include Dir.glob("#{src}/*.*")
FILES.each {|ext| files.include "#{src}/*.#{ext}"}
因为 FILES
(这是一个误导性的变量名)包含 "db"
,所以在第一行您要将 *.*
添加到 files
并在第二行您要将 *.db
添加到 files
。
不清楚为什么你有这两行,因为第一行会添加目录中的每个文件,所以第二行只会添加你已经添加的文件。