Rails资产预编译失败:node-sass依赖缺失Python环境问题
解决Ubuntu 20.04上Rails资产预编译时node-gyp找不到Python2的问题
方法一:临时指定node-gyp使用Python3
执行预编译命令前,通过环境变量强制node-gyp调用Python3:
export NODE_GYP_FORCE_PYTHON=$(which python3) && $HOME/.rbenv/bin/rbenv exec bundle exec rake assets:precompile
如果需要永久生效,把环境变量写入shell配置文件:
echo 'export NODE_GYP_FORCE_PYTHON=$(which python3)' >> ~/.bashrc source ~/.bashrc
方法二:创建Python2软链接
Ubuntu 20.04仓库仍提供Python2.7,先安装再做软链接适配node-gyp的默认查找逻辑:
sudo apt update && sudo apt install python2.7 sudo ln -s /usr/bin/python2.7 /usr/bin/python2
方法三:升级node-sass到支持Python3的版本
旧版node-sass依赖的node-gyp仅支持Python2,将package.json中的node-sass升级到v4.12.0及以上(该版本开始兼容Python3),再重新安装依赖:
yarn upgrade node-sass@^4.12.0 # 用npm的话执行:npm update node-sass@^4.12.0
之后再执行资产预编译命令。
方法四:配置node-gyp全局使用Python3
查看当前node-gyp的Python配置:
node-gyp configure --python
若显示为Python2,手动设置为Python3:
node-gyp configure --python python3
或通过npm全局配置永久生效:
npm config set python python3
额外排查点
- 对比两台服务器的node/npm/yarn版本,版本差异可能导致依赖处理逻辑不同
- 复制另一台正常服务器的
yarn.lock或package-lock.json到当前机器,重新安装依赖后再尝试预编译
内容的提问来源于stack exchange,提问作者Jerome
相关产品推荐
相关产品推荐

