2012-04-12 6 views
0

In einer Phing-Build-Datei möchte ich ein externes Programm aufrufen (lessc in diesem Fall), aber das Programm könnte an einem anderen Ort leben, abhängig davon, auf welchem ​​System das Skript ausgeführt wird .Lokalisieren eines Programms in einer Phing-Build-Datei

Dies ist, was ich gerade mache. Es funktioniert, aber es riecht mir:

<property name="lessc" value="/usr/bin/lessc" override="true" /> 

<if> 
    <not> 
    <available file="${lessc}" /> 
    </not> 
    <then> 
    <fail msg="Could not find LESS compiler at ${lessc}." /> 
    </then> 
</if> 

<exec command="${lessc} ..." /> 

Ich verwende einen property so dass der Benutzer einen alternativen Pfad zu lessc für ihr System angeben können, aber ich würde es vorziehen, wenn das Skript automatisch die Position bestimmen können die ausführbare Datei über z hash oder which.

Ist dies in Phing möglich?

+1

Ich habe benutzerdefinierte WENIGER Aufgabe für Phing auf Github zu sehen, ob das hilft – JasonDavis

Antwort

1

Ich bin neulich auf Use `env` on Sean Coates's blog gestoßen, das sich mit einem sehr ähnlichen Problem beschäftigt; In seinem Fall stellte er fest, dass PHP-Skripts fehlgeschlagen waren, wenn sie über CLI auf verschiedenen Systemen ausgeführt wurden, da PHP an verschiedenen Orten installiert war.

Seine Lösung war die #!/path/to/php Header mit #!/usr/bin/env php zu ersetzen. Da env (wahrscheinlich) immer unter /usr/bin/env zu finden ist, ist die einzige erforderliche Konfiguration, um sicherzustellen, dass die PHP-Binärdatei auf dem $PATH für jeden Benutzer ist, der das CLI-Skript ausführt. Keine serverspezifischen Codeänderungen notwendig!

Nun, das brachte mich zum Nachdenken.

änderte ich meine Build-Datei wie folgt aussehen, und alles funktioniert wunderbar jetzt:

<property name="env" value="/usr/bin/env" override="true" /> 

<if> 
    <not> 
    <available file="${env}" /> 
    </not> 
    <then> 
    <fail msg="Unable to locate env executable at ${env}." /> 
    </then> 
</if> 

<exec command="${env} lessc ..." /> 
0

Riecht wie eine benutzerdefinierte task zu mir.

+0

Eine benutzerdefinierte Aufgabe, die ausführbare Datei oder eine benutzerdefinierte Aufgabe zu lokalisieren, es zu berufen? Ich würde es vorziehen, den weniger Compiler nicht nach PHP zu portieren, wenn Sie das tun! (: –

+1

) Eine benutzerdefinierte Aufgabe, um die ausführbare Datei zu lokalisieren (und wahrscheinlich automatisch zu setzen). – raphaelstolt

0

ich das gleiche Problem hatte, und am Ende einen benutzerdefinierten Zustand zu schaffen, wie die available Zustand zu arbeiten. Es verwendet which/wo (unter Windows), um Orte im PATH zu suchen.

Es ist hier verfügbar: https://gist.github.com/dig412/5057536