Heroku安装sharp时node-gyp构建找不到libvips-cpp.so问题排查
问题根源
你遇到的报错是Heroku构建阶段和运行阶段的路径差异导致的:
- Heroku构建应用时,所有文件都放在临时构建目录(就是你日志里的
/tmp/build_1f4c5c03),构建完成后才会把目录内容移动到运行时的/app路径下 - 你用的vips buildpack在构建阶段把libvips放到了
/tmp/build_xxxx/vendor/vips路径下,但sharp的binding.gyp里的检测逻辑直接写死了去/app/vendor/vips下找libvips-cpp.so,构建阶段这个路径还不存在,所以会报错 - 你后续用
heroku run bash能找到文件是因为你已经完成了构建,文件已经被移动到/app路径下了,属于运行时的环境,和构建时环境不一样
解决方案
你可以选下面任意一种方法处理:
方法1:配置sharp使用正确的构建路径
在你的Heroku应用环境变量里添加两个变量:
SHARP_IGNORE_GLOBAL_LIBVIPS设为falsePKG_CONFIG_PATH补充构建阶段的vips pkgconfig路径,值为/tmp/build_*/vendor/vips/lib/pkgconfig
方法2:更换适配构建路径的vips buildpack
换用已适配Heroku构建路径的vips buildpack,这类buildpack会在构建阶段就把libvips的路径同时写入构建时和运行时的环境变量,sharp检测时可以直接通过pkg-config拿到正确的临时构建路径,不会硬找/app目录
方法3:手动指定libvips路径
在package.json里添加preinstall钩子,安装sharp前手动导出对应路径:
{ "scripts": { "preinstall": "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd)/vendor/vips/lib PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$(pwd)/vendor/vips/lib/pkgconfig" } }
内容的提问来源于stack exchange,提问作者Nicolas Ngô-Maï
相关产品推荐
相关产品推荐

