Ошибка посланника Laravel 5.6 при вызове с контроллера

Я пытаюсь использовать посланника из laravel для вызова некоторых скриптов на моем сервере. Прямо сейчас я делаю это с виртуальной машиной, установленной на моем Mac.

Я пытаюсь запустить сценарий посланника из контроллера следующим образом:

function __construct()
{
    $command = "/Users/test_user/.composer/vendor/bin/envoy run test --filename=new_folder"

    $process = new Process($command);
    $process->start();

    foreach ($process as $type => $data) {
        if ($process::OUT === $type) {
            echo "\nRead from stdout: ".$data;
        } else { // $process::ERR === $type
            echo "\nRead from stderr: ".$data;
        }
    }
    exit();
}

Теперь, когда я запускаю эту программу, я получаю следующий ответ:

Read from stdout: Valet requires Homebrew to be installed on your Mac.

Если я открываю свой терминал и запускаю: какой напиток

which brew
/usr/local/bin/brew

и мой $PATH

/Users/test_user/Android/platform-tools:/Users/test_user/Android/tools:~/.composer/vendor/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin alias numFiles='echo 14'

Я не совсем уверен, почему это похоже на сбой?

Валет был установлен с composer global require laravel/valet команда, и не был установлен локально для проекта.

Есть ли способ исправить это?

1 ответ

Вы должны установить посланника локально в вашем проекте:

composer require laravel/envoy

и выполнить его от продавца /bin/envoy.

Также не забудьте установить рабочий каталог для процесса на базовый путь, предполагая, что ваш Envoy.blade.php находится в корневом каталоге вашего приложения.

function __construct()
{
  $command = base_path('vendor/bin') . "/envoy run test --filename=new_folder"

  $process = new Process($command);
  $process->setWorkingDirectory(base_path());
  $process->start();

  foreach ($process as $type => $data) {
    if ($process::OUT === $type) {
        echo "\nRead from stdout: ".$data;
    } else { // $process::ERR === $type
        echo "\nRead from stderr: ".$data;
    }
  }
  exit();
}
Другие вопросы по тегам