2012-04-12 5 views
0

В файле сборки Phing я хотел бы вызвать внешнюю программу (lessc в этом случае), но программа может жить в другом месте, в зависимости от того, в какой системе работает скрипт ,Поиск программы в файле сборки Phing

Это то, что я делаю сейчас. Это работает, но он пахнет мне:

<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} ..." /> 

Я использую property, так что пользователь может указать альтернативный путь к lessc для своей системы, но я бы предпочел, если сценарий может автоматически определять местоположение исполняемый файл, например, hash или which.

Это можно сделать в Phing?

+1

Я видел обычай МЕНЬШЕ задачу Phing на Github, если это помогает – JasonDavis

ответ

1

На днях я столкнулся с Use `env` on Sean Coates's blog, что касается очень похожей проблемы; в своем случае он обнаружил, что PHP-скрипты терпят неудачу при запуске через CLI в разных системах, поскольку PHP был установлен в разных местах.

Его решение состояло в том, чтобы заменить заголовок #!/path/to/php на #!/usr/bin/env php. Так как env (вероятно) всегда находится в /usr/bin/env, единственной необходимой конфигурацией является обеспечение того, чтобы двоичный файл PHP находился на $PATH для любого пользователя, выполняющего скрипт CLI. Никаких изменений кода на сервере не требуется!

Ну, это заставило меня задуматься.

Я изменил мой файл сборки, чтобы посмотреть, как это, и все работает прекрасно Сейчас:

<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

Запах как обычай task для меня.

+0

Пользовательская задача, чтобы найти исполняемый файл, или задачу для вызова его? Я бы предпочел не переносить меньше компилятора на PHP, если это то, что вы получаете! (: –

+1

Пользовательская задача - найти (и, возможно, автоматически установить) исполняемый файл. – raphaelstolt

0

У меня была такая же проблема, и в конечном итоге создание пользовательского условия для работы как условие available. Он использует, где/где (в Windows) поиск местоположений в PATH.

Она доступна здесь: https://gist.github.com/dig412/5057536

Смежные вопросы