2015-04-23 12 views
5

Szukam sposobu, aby móc sprawdzić, czy pewne zadanie rake istnieje z Rakefile. Mam zależność od zadania, które chcę dołączyć jako zależność, jeśli to zadanie jest dostępne. W tym konkretnym przypadku zadanie jest dostępne tylko w projekcie Rails, ale chcę, aby moje zadania rake'a działały również w bardziej ogólnym środowisku aplikacji Ruby (nie tylko w Railsach).Sprawdź, czy zadanie rake istnieje z poziomu Rakefile

chcę zrobić coś takiego:

if tasks.includes?('assets:precompile') 
    task :archive => [:clean, :vendor_deps, 'assets:precompile'] 
    ... 
    end 
else 
    task :archive => [:clean, :vendor_deps] 
    ... 
    end 
end 

Jaki jest najlepszy sposób, aby warunkowo zawierać zależność zadania w zadaniu nachylenia?

Odpowiedz

11

co robić coś takiego? Wywołać zadanie, jeśli istnieje, w przeciwieństwie do uczynienia go wyraźną zależnością?

task :archive => [:clean, :vendor_deps] do 
    Rake.application["assets:precompile"].invoke if Rake::Task.task_defined?('assets:precompile') 
    .... 
    end 

lub jeszcze łatwiej. PoniewaŜ ponowne wyszczególnienie zadania umoŜliwia dodanie go, wydaje się, Ŝe coś takiego równieŜ działa.

task :archive => [:clean, :vendor_deps] do 
    ... 
    end 
task :archive => "assets:precompile" if Rake::Task.task_defined?("assets:precompile") 

który uzależni warunkowo od zasobów: prekompilacja, jeśli jest zdefiniowana.

+1

Wybrać odpowiedź @ Doon ze względu na dokładniejsze wyjaśnienie. – conorliv

+1

Wystarczająco fair. Po prostu bądź ostrożny przy użyciu 'invoke', ponieważ nie działa on tak samo, jak zależności. Zawsze będzie uruchamiać zadanie rake, natomiast w przypadku zależności uruchomi tylko zadanie rake, jeśli jeszcze nie zostało uruchomione. – Shadwell

+2

@Shadwell, nie wywołuje zrobić tylko w razie potrzeby, podczas gdy wykonanie działa niezależnie? W pierwszym przykładzie powinien go wywołać, a jeśli nie został już wykonany, zostanie wykonany. Jeśli tak było, to nadal będzie wywoływać, ale nie wykonywać. Gdybym tego potrzebował, prawdopodobnie byłby to ostatni przykład, że jest bardziej przydatny/ogólny, jak sądzę. – Doon