2017-01-20 6 views
0

AFAIK、Rakeには、無条件で実行するRake::Taskと、後で名前を付けたファイルが存在しない場合に実行するRake::FileTaskという2種類のタスクがあります。また、前提条件の1つ古いものです。「必要なものをカスタマイズする」 RAKEタスクの条件

タスクを実行する必要があるかどうかを判断するロジックをカスタマイズする従来の方法はありますか?たとえば、ファイルの存在を検証するだけでなく、その内容を何らかの形でテストしたいと思った場合などです。

私は方法Rake::Task#needed?がこれを処理するのを見ることができます、そして、サブクラスのそれを無効にすることは実際に働きます。しかし、これを行うためのより慣用的な方法がありますか? Rakefileに直接含める方が適していると思われるものはありますか?

need :process do 
    # Check if file is already processed 
end 

task :process do 
    # Process file in-place 
end 

そのneedブロックのすべてがtrueを返す場合は、タスクをスキップします:

私はこのようなものを想像しています。

答えて

1

タスクを実行する必要があるかどうかを判断するロジックをカスタマイズする従来の方法はありますか?

はい;それを行う方法は次のとおりです。

  • prerequisitetask_2として「二次的なタスクを」宣言
  • が進行されていない exist 場合に必要な操作をtask_1として「必要なタスク」を宣言し、それを聞かせて:task_1

ので、あなたのrakeファイルは次のようになります:

# check if needed is done 
def needed_done?  
    return false # TODO: edit checking logic 
end 

desc "do prerequisite stuff" 
task :do_needed do 
    p "do needed stuff" 
    unless needed_done? 
    p "needed stuff wasn't done ^^'" 
    exit 1 
    end 
end 

desc "process other stuff, if prerequisite is meet" 
task :process => [:do_needed] do 
    p "process other stuff" 
end 
あなたとタスクprocessを走った今

rake process 

do_neededが自動的needed_done?が、その後processを実行する場合は、他のあなたはそれ

を実行せずに終了します、最初に走っただろう
関連する問題