Ruby Rake FILE方法不起作用

时间:2016-06-13 08:13:54

标签: ruby methods rake rakefile

这是我第一次使用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进行故障排除的吗?

由于

2 个答案:

答案 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,我已经理解了!

我有两个错误:

  1. 循环,如larrylv所说
  2. 我没有调用文件任务! (larrylv说)
  3. 所以我举报一个有效的简单例子

    f1 = "config.yaml"
    f2 = "Rakefile.rb"
    
    task :ffile => ["#{f1}"]
    
    file "#{f1}" => ["#{f2}"] do 
         puts "lul"
    end
    

    使用此命令rake ffile可以正常工作。

    谢谢!