2016-03-27 4 views
2

Ich habe diese Haupt-Rake AufgabeAusfahrt aus einem von einer Reihe von Rake Aufgaben und weiter mit den nächsten

namespace :crawler do 

    task main: :environment do 
    Rake::Task['tester:first'].execute 
    Rake::Task['tester:second'].execute 
    Rake::Task['tester:third'].execute 
    end 

    end 

Jede Aufgabe, ein Stück Code ausgeführt wird, die ein Wert prüft für anwesend sein, wenn dies nicht der Fall Beende dann die Aufgabe und fahre mit der nächsten fort. Eigentlich ist der Code der folgenden, aber es funktioniert nicht

def check(value) 
if !value.nil? 
    return value 
else 
    exit 
end 
end 

Als ich den Ausgang Teil erreichen, das ganze Programm beendet, und die anderen Aufgaben werden nicht ausgeführt.

+3

Exit beendet das gesamte Skript, nicht nur den Task. Kannst du es nicht einfach rausnehmen? – tpbowden

+0

Sie schrieb "prüft auf einen Wert zu sein, wenn es nicht ist, dann beenden Sie die Aufgabe", aber in Ihrer "check" -Methode führen Sie "Exit", wenn der Wert vorhanden ist (nicht Null) – emery

+0

möglich duplicate von http://stackoverflow.com/questions/2316475/how-do-i-return-early-from-a-rake-task – emery

Antwort

1

Versuchen Sie es mit "next" innerhalb Ihrer Rake-Aufgabe, um zur nächsten Aufgabe zu springen, wenn Ihre Prüfmethode nil zurückgibt.

Sie können eine Bedingung in Ihrer "check" -Funktion verwenden, um den Wert zurückzugeben, wenn sie existiert, oder um nil zurückzugeben, wenn der Wert nil ist. Wenn check dann nil zurückgibt, können Sie next (not exit) verwenden, um zur nächsten Aufgabe zu springen.

task :main do 
    Rake::Task['first'].execute(value: 'Hello, Rake world!') 
    Rake::Task['second'].execute 
end 

task :first do |_t, args| 
    value = args[:value] 
    next if check(value).nil? 
    puts 'the value is: ' + value 
end 

task :second do 
    puts 'the second task' 
end 

def check(value) 
    if value.nil? 
    return nil 
    else 
    return value 
    end 
end 

Mit "nächsten" innerhalb der Funktionsdefinition wird nicht funktionieren. Sie können nur innerhalb des aktuellen Rake-Tasks zum nächsten Rake-Task springen

+1

Danke, ich habe Ihre Lösung angewendet und es funktioniert gut! Ich werde diesen Weg gehen! – Jack

+0

eine andere Möglichkeit, das if/else/end in die Prüfmethode zu schreiben, wäre die Verwendung eines Ternärs: "return value.nil?? Nil: value" – emery

Verwandte Themen