Ubuntu20.04中如何配置使yarn在Deployer任务中正常运行?
解决Deployer任务中无法找到yarn的问题
出现这个问题的核心原因是:手动登录服务器属于交互式登录shell,会自动加载~/.bashrc、~/.profile等配置文件中的nvm环境变量;而Deployer执行任务时使用的是非交互式非登录shell,不会加载这些配置,导致系统PATH中没有yarn的路径。
以下是几种可行的解决方法:
直接调用yarn绝对路径
既然已经明确yarn的路径是/root/.nvm/versions/node/v19.0.0/bin/yarn,可以在Deployer任务中直接使用绝对路径执行命令:task('deploy:install', function () { run('/root/.nvm/versions/node/v19.0.0/bin/yarn install'); });该方法简单直接,适合固定node版本的场景。
在Deployer任务中加载nvm环境
nvm的初始化脚本通常位于~/.nvm/nvm.sh,可以在执行yarn命令前先加载该脚本,让非交互式shell获取nvm配置的环境变量:task('deploy:install', function () { run('source ~/.nvm/nvm.sh && yarn install'); });如果使用zsh等其他shell,需对应调整加载的nvm初始化文件。
全局配置PATH环境变量
将yarn的路径添加到系统级的PATH配置中,让所有shell(包括非交互式)都能识别:- 创建自定义配置文件:
echo 'export PATH="/root/.nvm/versions/node/v19.0.0/bin:$PATH"' > /etc/profile.d/custom.sh - 赋予执行权限:
chmod +x /etc/profile.d/custom.sh
注意:如果后续通过nvm切换node版本,需要手动更新这个路径。
- 创建自定义配置文件:
在Deployer配置中设置全局环境变量
在deploy.php中直接配置PATH变量,让所有Deployer任务都使用包含yarn路径的环境:set('env', [ 'PATH' => '/root/.nvm/versions/node/v19.0.0/bin:' . getenv('PATH'), ]);
内容的提问来源于stack exchange,提问作者DengSihan
相关产品推荐
相关产品推荐

