Фабрикатор делает предположения об окружающей среде

Я пытаюсь запустить Phabricator на Solaris через Apache. Сайт работает, но не все сценарии Cli. Например, phd,

Первая проблема заключается в том, что он не передает аргументы подчиненному manage-daemons.php сценарий, который он вызывает. Глядя на phd файл, меня это не удивляет

$> cat phd

../scripts/daemon/manage_daemons.php

Теперь, учитывая мою оболочку по умолчанию bashэто не будет проходить через мои аргументы. Для этого я изменил скрипт:

#! /bin/bash
../scripts/daemon/manage_daemons.php  $*

Теперь это будет проходить через аргументы, но теперь не удается найти требуемые транзитивные сценарии по относительному пути:

./phd start
Preparing to launch daemons.
NOTE: Logs will appear in '/var/tmp/phd/log/daemons.log'.

Launching daemon "PhabricatorRepositoryPullLocalDaemon".
[2014-05-09 19:29:59] EXCEPTION: (CommandException) Command failed with error #127!
COMMAND
exec ./phd-daemon 'PhabricatorRepositoryPullLocalDaemon' --daemonize --log='/var/tmp/phd/log/daemons.log' --phd='/var/tmp/phd/pid'

STDOUT
(empty)

STDERR
./phd-daemon: line 1: launch_daemon.php: not found
 at [/XXX/XXX/libphutil/src/future/exec/ExecFuture.php:398]
  #0 ExecFuture::resolvex() called at [/XXX/XXX/phabricator/src/applications/daemon/management/PhabricatorDaemonManagementWorkflow.php:167]
  #1 PhabricatorDaemonManagementWorkflow::launchDaemon(PhabricatorRepositoryPullLocalDaemon, Array , false) called at [/XXX/XXX/phabricator/src/applications/daemon/management/PhabricatorDaemonManagementWorkflow.php:246]
  #2 PhabricatorDaemonManagementWorkflow::executeStartCommand() called at [/XXX/XXX/phabricator/src/applications/daemon/management/PhabricatorDaemonManagementStartWorkflow.php:18]
  #3 PhabricatorDaemonManagementStartWorkflow::execute(Object PhutilArgumentParser) called at [/XXX/XXX/libphutil/src/parser/argument/PhutilArgumentParser.php:396]
  #4 PhutilArgumentParser::parseWorkflowsFull(Array of size 9 starting with: { 0 => Object PhabricatorDaemonManagementListWorkflow }) called at [/XXX/XXX/libphutil/src/parser/argument/PhutilArgumentParser.php:292]
  #5 PhutilArgumentParser::parseWorkflows(Array of size 9 starting with: { 0 => Object PhabricatorDaemonManagementListWorkflow }) called at [/XXX/XXX/phabricator/scripts/daemon/manage_daemons.php:30]

Заметьте, что я скрыл свои пути XXX как они раздают конфиденциальную информацию.


Теперь, очевидно, я не должен изменять эти сценарии. Это указывает на то, что некоторые предварительные условия не установлены должным образом.

Мне ясно, что Phabricator делает некоторые (смелые) предположения о моей настройке. Но я не совсем уверен, что...?

1 ответ

Решение

Это должны быть символические ссылки. Например, если вы посмотрите на "phd" в репозитории на GitHub, вы увидите, что тип файла "символическая ссылка":

https://github.com/facebook/phabricator/blob/master/bin/phd

Что-то в вашей среде неправильно превращает символические ссылки в обычные файлы. Я не знаю ни о какой конфигурации Git, которая может вызвать это, хотя возможно, что-то есть. Одна из ситуаций, когда я видел это, - когда клонировали рабочую копию, а затем копировали, используя rsync без соответствующих флагов, чтобы сохранить символические ссылки.

Другие вопросы по тегам