1

我正在尝试使用 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

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'

我不确定为什么这似乎失败了?

Valet 是使用composer global require laravel/valet命令安装的,并没有在本地为项目安装。

有没有办法解决这个问题?

4

1 回答 1

0

您应该在项目中本地安装特使:

composer require laravel/envoy

并从 vendor/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();
}
于 2018-03-23T14:53:40.760 回答