2016-05-07 6 views
0

Kurzversion:Wie kann ich verhindern, dass Rake eine Dateiabhängigkeit als möglichen Aufgabennamen behandelt?

Ich habe ein Problem: eine Dateiabhängigkeit ich für eine Rake Aufgabe benötigen stimmt mit dem Namen einer anderen Rake Aufgabe, so stattdessen auf der Datei abhängig, Harke versucht, die Aufgabe zu hängen mit der passender Name.

Wie sage ich Rake, nur eine Abhängigkeit zu einer Datei zu entsprechen? Gibt es einen anderen Ausweg?

Lange Version:

Ich versuche, eine Harke Aufgabe in meiner Rails-Anwendung zu erstellen, die alle Dateien, Reißverschlüsse bis ich interessieren. Das ist es. Einfach.

Ich würde auch die normalen Abhängigkeitstests in Rake zu schätzen wissen: Wenn keine Dateien geändert wurden und die Zip-Datei bereits existiert, tun Sie nichts.

Das Problem ist, dass eine der Dateien, die ich in die ZIP-Datei aufnehmen möchte (und so als Aufgabenabhängigkeit behandeln), das Verzeichnis test ist, aber rake test ist zufällig eine vorhandene Rake-Aufgabe. Wenn ich etwas sagen wie:

# FILES_TO_INCLUDE being a Rake::FileList... 
file 'output.zip' => FILES_TO_INCLUDE.to_a do 
    ... 
end 

Rake landet rake test auch ausgeführt wird.

Da ich ständig Dateien hinzufüge, und da Rails hin und wieder die integrierten Rake-Aufgaben ändert, kann ich nie sicher sein, dass es keinen Konflikt zwischen Rake-Tasks und Dateinamen gibt.

Was kann ich tun, um dieses Problem zu vermeiden? Gibt es eine bessere Verwendung von Rake, die ich vermisse?

Antwort

1

Ich beobachte das gleiche Verhalten. Die FileTask, wie sie in der file Methode in dem Rake-DSL definiert, erbt von der Haupt-Rake Task Klasse und in der Tat, die Abhängigkeiten Aufruf (oder in Rake Sprache prerequisities) scheint das gleiche für Task s sowie FileTask s zu sein, das heißt Wenn ein Dateiname bereits als Rake-Task definiert ist, wird die Task stattdessen ausgeführt.

Die einzige Lösung, die mir in den Sinn kommt, ist das Hinzufügen des Pfadteils zu den Dateien in FILES_TO_INCLUDE. Es kann alles so einfach wie ein "./" Präfix sein.

Also, würde ich dies stattdessen versuchen:

file 'output.zip' => FILES_TO_INCLUDE.map { |file| "./#{file}" } do 
    ... 
end 

Dieser Ansatz für mich zu arbeiten OK scheint.

Auch für Ihr spezielles Szenario (eine ZIP-Datei von einigen anderen Dateien zu erstellen), können Sie tatsächlich eine fertige Lösung bereits in Rake verwenden, die PackageTask:

Rake::PackageTask.new("rake", "1.2.3") do |p| 
    p.need_zip = true 
    p.package_files.include("lib/**/*.rb") 
end 

Dies erstellen Ein rake-1.2.3.zip Archiv im Unterverzeichnis pkg (konfigurierbar). Wahrscheinlich müssen Sie den Dateien auch einige Verzeichnisspezifikationen voranstellen.