这是我第一次使用rake,我发现文件依赖性存在问题。
要进行测试,请在Rakefile.rb
中输入此代码:
task :ffile do
f1 = "config.yaml"
f2 = "Rakefile.rb"
if File.file? f1 then puts "## test file task on #{f1}" end
if File.file? f2 then puts "## test file task on #{f2}" end
file "#{f1}" => "#{f2}" do
puts "lol"
end
file "#{f2}" => "#{f1}" do
puts "lul"
end
file "#{f1}" do
puts "lil"
end
file "#{f2}" do
puts "lal"
end
end
我在Windows 10上,运行时
rake ffile
结果是
Starting rake operations...
## test file task on config.yaml
## test file task on Rakefile.rb
文件方法在所有四种情况下都不执行任何操作。我还尝试删除引号(即f1
而不是"#{f1}"
,依此类推所有file
)但获得相同的结果。
显然,每次我在测试时保存Rakefile.rb
,所以我确信应该触发其中一个文件方法。
有语法错误?它是用Windows 10进行故障排除的吗?
由于
答案 0 :(得分:1)
file
方法实际上是用于定义文件任务https://github.com/ruby/rake/blob/b63f7d33d72782f646ef95da10300d273c9b8006/lib/rake/dsl_definition.rb#L75的DSL,必须手动调用。
Rake::Task[f1].invoke
Rake::Task[f2].invoke
由于您的dsl定义具有循环依赖关系:TOP => config.yaml => Rakefile.rb => config.yaml
,因此添加上述代码将引发错误。
但我认为您可以了解如何调用文件任务。
答案 1 :(得分:0)
谢谢larrylv,我已经理解了!
我有两个错误:
所以我举报一个有效的简单例子
f1 = "config.yaml"
f2 = "Rakefile.rb"
task :ffile => ["#{f1}"]
file "#{f1}" => ["#{f2}"] do
puts "lul"
end
使用此命令rake ffile
可以正常工作。
谢谢!