以下文件任务未执行。它是一个简单的Rakefile的内容,用于创建一个名为hello.txt
的文件,如果它不存在的话。
task :default do
puts "before file task"
file "hello.txt" do
puts "in file task"
sh "touch hello.txt"
end
puts "after file task"
end
在Rakefile所在目录的shell提示符下运行rake
后,输出为:
before file task
after file task
并且没有创建hello.txt
文件。
我不确定为什么文件任务不起作用,就我的眼睛而言,Rakefile的文件任务部分的语法看起来很合理。我在这里做错了什么?
答案 0 :(得分:3)
当你致电default
- 任务时,它会做三件事
重复一件重要的事情:文件任务 hello.txt 已定义,而非已执行
也许你想做类似的事情:
task :default do
puts "before file creation"
File.open("hello.txt","w") do |f|
puts "in file creation"
f << "content for hello.txt"
end
puts "after file creation"
end
这将始终创建文件。
您也可以使用pyotr6 answer中的方法:
task :default => 'hello.txt' do
puts "default task, executed after prerequistes"
end
file 'hello.txt' do |tsk|
File.open(tsk.name, "w") do |f|
puts "in file creation of #{f.path}"
f << "content for hello.txt"
end
end
这将创建一次hello.txt。如果hello.txt已存在,则文件任务将无法启动。
要重新生成hello.txt,您需要一个prerequsite(通常这是另一个文件,它是hello.txt的源代码)。
您可以使用虚拟任务强制重新生成:
task :force #Dummy task to force file generation
file 'hello.txt' => :force
答案 1 :(得分:1)
必须像常规任务方法那样直接调用或引用文件任务。 E.g。
task :default => "hello.txt" do
puts "after file task"
end
file "hello.txt" do
puts "in file task"
sh "touch hello.txt"
end