夏普包 Heroku 部署问题
Posted
技术标签:
【中文标题】夏普包 Heroku 部署问题【英文标题】:Sharp package Heroku deployment issue 【发布时间】:2019-08-20 04:59:09 【问题描述】:我正在将我的 NodeJs 应用程序部署到 Heroku。在本地使用 nodemon 运行应用程序没有问题。
但是,当我尝试推送到 Heroku Master 时,似乎“sharp”包引起了问题:
remote: -----> 安装依赖项
远程:安装节点模块(package.json + package-lock)
远程:
远程:> sharp@0.22.0 安装 /tmp/build_4cfeda2379ea362c72ac083b57638cce/node_modules/sharp
remote: > (node install/libvips && node install/dll-copy && 预构建安装)|| (node-gyp 重建 && 节点安装/dll-copy)
远程:
remote: info sharp 正在下载 https://github.com/lovell/sharp-libvips/releases/download/v8.7.4/libvips-8.7.4-linux-x64.tar.gz
远程: /tmp/build_4cfeda2379ea362c72ac083b57638cce/node_modules/sharp/install/libvips.js:86
远程:抛出新错误(
Status $response.statusCode
);远程:^
远程:
远程:错误:状态 403
远程:在 /tmp/build_4cfeda2379ea362c72ac083b57638cce/node_modules/sharp/install/libvips.js:86:17
远程:在 f (/tmp/build_4cfeda2379ea362c72ac083b57638cce/node_modules/once/once.js:25:25)
远程:在 ClientRequest.protocol.request.res (/tmp/build_4cfeda2379ea362c72ac083b57638cce/node_modules/simple-get/index.js:63:5)
远程:在 Object.onceWrapper (events.js:277:13)
远程:在 ClientRequest.emit (events.js:189:13)
远程:在 HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:556:21)
远程:在 HTTPParser.parserOnHeadersComplete (_http_common.js:109:17)
远程:在 TLSSocket.socketOnData (_http_client.js:442:20)
远程:在 TLSSocket.emit (events.js:189:13)
远程:在 addChunk (_stream_readable.js:284:12)
remote: make: 进入目录 '/tmp/build_4cfeda2379ea362c72ac083b57638cce/node_modules/sharp/build'
远程:TOUCH Release/obj.target/libvips-cpp.stamp
远程:CXX(target) Release/obj.target/sharp/src/common.o
远程:../src/common.cc:25:10:致命错误:vips/vips8:否 这样的文件或目录
远程:#include
远程:^~~~~~~~~~~~
远程:编译终止。
远程:sharp.target.mk:128:目标配方 'Release/obj.target/sharp/src/common.o' 失败
remote: make: *** [Release/obj.target/sharp/src/common.o] 错误 1
remote: make: 离开目录 '/tmp/build_4cfeda2379ea362c72ac083b57638cce/node_modules/sharp/build'
更新:
尝试从 package.json 中删除 sharp,这次使用 npm install sharp works 重新添加...我仍然不知道为什么。
remote: -----> 安装依赖项
远程:安装节点模块(package.json + package-lock)
远程:
远程:> sharp@0.22.0 安装 /tmp/build_5c8d3b01594e0b86f9d3e0d372534414/node_modules/sharp
remote: > (node install/libvips && node install/dll-copy && 预构建安装)|| (node-gyp 重建 && 节点安装/dll-copy)
远程:
remote: info sharp 正在下载 https://github.com/lovell/sharp-libvips/releases/download/v8.7.4/libvips-8.7.4-linux-x64.tar.gz
remote:添加了来自 92 个贡献者的 57 个包并经过审核 20393 包 10.683s
remote:发现 62 个低危漏洞
远程:运行
npm audit fix
来修复它们,或者运行npm audit
来修复它们 详情远程:
远程:----->构建
远程:
远程:----->缓存构建
远程:-node_modules
远程:
remote: -----> 修剪 devDependencies
remote:8.181s 移除 606 个包,审计 497 个包
远程:发现0个漏洞
远程:
远程:
remote: -----> 构建成功!
【问题讨论】:
有人遇到同样的问题吗?或者有没有用于图像压缩的锐化包的替代方案? 我只能使用官方文档在Heroku中使用sharp,你可以使用gm(npmjs.com/package/gm)模块作为替代 希望你不要也推node_modules
文件夹?
感谢@Gomzy 的推荐,我现在可以使用sharp 在Heroku 上部署它
@AsgharMusani,谢谢。推送之前我已经加到.gitignore了,不要以为是这个原因。也许我会迁移到 AWS 以防止此类问题再次发生。
【参考方案1】:
有这个问题的人很多,它与libvips有关,因为依赖关系本身并不尖锐。
在this issue-comment 的github 上解释了问题:
sharp 的预构建二进制文件只保证与 libvips 的预构建二进制文件一起使用。
如果下载 libvips 的预构建二进制文件失败,则 sharp 必须回退到尝试从源代码构建自身。
http://sharp.pixelplumbing.com/en/stable/install/#pre-compiled-libvips-binaries 提供有关从本地 URL 提供 libvips 二进制文件的信息。
下载失败的原因可能是缓存,或者像上面github上的链接问题中报告的损坏的下载:
我不得不手动删除
~/.npm/_libvips/libvips-8.7.0-linux-x64.tar.gz
并重试。似乎下载了一个损坏的文件。
这是一个关于与 gatsby 相关的同一问题的有趣讨论,即使该问题已关闭(在发表任何评论之前)似乎还没有解决方案:https://github.com/gatsbyjs/gatsby/issues/1754
但是,如果由于某种原因问题仅与下载有关,则可以按照manual 中的说明在本地部署 libvips:
预编译的 libvips 二进制文件 该模块将尝试下载预编译的 libvips 包 及其对 Linux 和 Windows 机器的依赖 这些条件:
如果全局安装满足最低版本的 libvips 找不到需求; 如果设置了SHARP_IGNORE_GLOBAL_LIBVIPS
环境变量。SHARP_IGNORE_GLOBAL_LIBVIPS=1 npm install sharp
如果您需要手动下载和检查这些文件, 你可以通过https://github.com/lovell/sharp-libvips/releases 这样做
如果您希望从自己的位置安装这些,请设置
sharp_dist_base_url
npm 配置选项,例如npm config set sharp_dist_base_url "https://hostname/path/" npm install sharp
或者设置
SHARP_DIST_BASE_URL
环境变量,例如SHARP_DIST_BASE_URL="https://hostname/path/" npm install sharp
使用
https://hostname/path/libvips-x.y.z-platform.tar.gz
。
所以这有点背景,我知道这不能真正被视为解决方案的答案:/
【讨论】:
【参考方案2】:如果有人到达这里但没有找到答案 - 我的问题是我的项目使用的是旧节点版本 (8.x)
解决方案是安装旧版本的Sharp - 支持8.x 的最新版本 - "sharp": "0.23.4"
【讨论】:
以上是关于夏普包 Heroku 部署问题的主要内容,如果未能解决你的问题,请参考以下文章
出现错误:部署到 heroku 时,您必须至少安装一个 postgresql-client-<version> 包