【问题标题】:Ruby Rake FILE method doesn't workRuby Rake FILE 方法不起作用
【发布时间】:2016-06-13 08:13:54
【问题描述】:

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

谢谢

【问题讨论】:

  • file 应该做什么?可以发一下代码吗?

标签: ruby methods rake rakefile


【解决方案1】:

file方法实际上是一个DSL来定义一个文件任务https://github.com/ruby/rake/blob/b63f7d33d72782f646ef95da10300d273c9b8006/lib/rake/dsl_definition.rb#L75,需要手动调用。

Rake::Task[f1].invoke
Rake::Task[f2].invoke

由于您的 dsl 定义具有循环依赖:TOP => config.yaml => Rakefile.rb => config.yaml,因此添加上述代码会引发错误。

但我认为您可以了解如何调用文件任务。

【讨论】:

    【解决方案2】:

    谢谢larrylv,我明白了!

    我有两个错误:

    1. 圆形,正如 larrylv 所说的
    2. 而且我不调用文件任务! (larrylv 说)

    所以我报告了一个有效的简单示例

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

    这样,rake ffile 命令就可以作为切面工作了。

    谢谢!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-16
      • 2011-04-17
      • 1970-01-01
      • 1970-01-01
      • 2012-04-08
      • 2014-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多