Rake文件任务不起作用

时间:2013-07-26 03:17:59

标签: ruby build rake

以下文件任务未执行。它是一个简单的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的文件任务部分的语法看起来很合理。我在这里做错了什么?

2 个答案:

答案 0 :(得分:3)

当你致电default - 任务时,它会做三件事

  1. 在文件任务之前写
  2. 定义文件任务'hello.txt'
  3. 在文件任务之后写
  4. 重复一件重要的事情:文件任务 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