You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 5.6从控制器调用Envoy报错问题求助

解决Laravel控制器调用Envoy时找不到brew的问题

这个问题的核心原因很明确:当你通过Laravel控制器执行Envoy脚本时,运行脚本的PHP进程(比如php-fpm)的环境变量$PATH和你终端里的完全不一样。终端里的$PATH包含了brew的路径,但Web进程的PATH默认是极简的,所以找不到brew命令。

下面给你几个可行的解决办法,按优先级推荐:

方法一:直接使用brew的绝对路径(最简单)

先在终端里执行which brew,得到brew的绝对路径(比如M1/M2 Mac通常是/opt/homebrew/bin/brew,Intel Mac是/usr/local/bin/brew)。

然后在你的Envoy脚本里,把所有brew命令替换成这个绝对路径。比如原来的:

brew update

改成:

/opt/homebrew/bin/brew update

方法二:在Envoy任务中手动设置PATH

如果不想每次都写绝对路径,可以在Envoy的任务开头,先把brew所在的目录添加到$PATH里:

@servers(['web' => 'your-server-address'])

@task('deploy')
    # 把brew的路径加到PATH最前面,确保优先找到
    export PATH="/opt/homebrew/bin:/usr/local/bin:$PATH"
    
    # 现在可以正常用brew命令了
    brew upgrade some-package
    # 其他任务命令...
@endtask

方法三:修改PHP-FPM的环境变量配置(全局生效)

如果希望所有Web进程都能找到brew,可以修改php-fpm的配置文件:

  1. 找到Valet对应的php-fpm配置文件,比如PHP 8.2的话,路径是/usr/local/etc/php/8.2/php-fpm.d/www.conf(不同版本路径会有变化)。
  2. 找到env[PATH]这一行(如果被注释了就去掉前面的;),把它改成包含brew所在目录的路径:
env[PATH] = /opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
  1. 重启php-fpm服务:
brew services restart php@8.2

(注意替换成你正在使用的PHP版本号)

额外提示

因为Valet是全局安装的,它运行的Web进程继承的是系统默认的环境变量,而不是你终端用户的个性化PATH配置(比如.zshrc或.bashrc里设置的PATH),所以才会出现终端能找到brew,但控制器调用找不到的情况。优先用前两种方法,避免全局修改可能带来的其他问题。

内容的提问来源于stack exchange,提问作者killstreet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:23:52