Sharp软件包Heroku部署问题

时间:2019-03-29 09:29:55

标签: node.js heroku sharp

我正在将NodeJs应用程序部署到Heroku。在本地运行带有nodemon的应用程序没有问题。

但是,当我尝试推送到Heroku Master时,似乎出现了“ sharp”包引起问题:

  

远程:----->安装依赖项

     

远程:安装节点模块(package.json + package-lock)

     

远程:

     

远程:> sharp@0.22.0安装   / tmp / build_4cfeda2379ea362c72ac083b57638cce / node_modules / sharp

     

远程:>(节点安装/ libvips &&节点安装/ dll-copy &&   prebuild-install)|| (node-gyp重建&&节点安装/ dll复制)

     

远程:

     

远程:信息快速下载   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_visible.js:284:12)

     

远程:make:进入目录   '/ tmp / build_4cfeda2379ea362c72ac083b57638cce / node_modules / sharp / build'

     

远程:触摸释放/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:目标配方   “发布/obj.target/sharp/src/common.o”失败

     

远程:make:*** [Release / obj.target / sharp / src / common.o]错误   1

     

远程:make:离开目录   '/ tmp / build_4cfeda2379ea362c72ac083b57638cce / node_modules / sharp / build'

更新:

尝试从package.json中删除Sharp,然后使用npm install再次将其重新添加。这次我仍然不知道为什么。

  

远程:----->安装依赖项

     

远程:安装节点模块(package.json + package-lock)

     

远程:

     

远程:> sharp@0.22.0安装   / tmp / build_5c8d3b01594e0b86f9d3e0d372534414 / node_modules / sharp

     

远程:>(节点安装/ libvips &&节点安装/ dll-copy &&   prebuild-install)|| (node-gyp重建&&节点安装/ dll复制)

     

远程:

     

远程:信息清晰下载   https://github.com/lovell/sharp-libvips/releases/download/v8.7.4/libvips-8.7.4-linux-x64.tar.gz

     

远程:添加了来自92位贡献者的57个软件包,并进行了审核   10.683秒内包含20393个包

     

远程:发现了62个低严重漏洞

     

远程:运行npm audit fix进行修复,或运行npm audit进行修复   详细信息

     

远程:

     

远程:----->构建

     

远程:

     

远程:----->缓存构建

     

远程:-node_modules

     

远程:

     

远程:----->修剪devDependencies

     

远程:在8.181秒内删除了606个程序包并审核了497个程序包

     

远程:发现0个漏洞

     

远程:

     

远程:

     

远程:----->构建成功!

2 个答案:

答案 0 :(得分:1)

有很多人遇到这个问题,这与libvips有关,因为依赖本身并不十分明显。

this issue-comment中的github上,该问题得到了解释:

  

Sharp的预构建二进制文件只能保证与libvips的预构建二进制文件一起使用。

     

如果预编译的libvips二进制文件的下载失败,则Sharp必须退回到尝试从源代码进行自身构建的方式。

     

http://sharp.pixelplumbing.com/en/stable/install/#pre-compiled-libvips-binaries提供了有关从本地URL提供libvips二进制文件的信息。

下载失败的原因可能是缓存,或下载损坏的下载,如在github上的上述链接问题中所述:

  

我必须手动删除Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1 at java.lang.String.substring(String.java:1911) at Riccio_Lesson6.main(Riccio_Lesson6.java:51) ,然后重试。似乎是下载了损坏的文件。

关于与gatsby相关的同一问题,这里是一个有趣的讨论,即使该问题已关闭(在发表任何评论之前),似乎也没有解决方案:https://github.com/gatsbyjs/gatsby/issues/1754

但是,如果由于某种原因该问题仅与下载有关,则可以像manual中所述在本地部署libvips:

  

预编译的libvips二进制文件
  该模块将尝试下载预编译的libvips软件包   及其在以下两种情况下对Linux和Windows计算机的依赖关系   这些条件:

     
      
  • 如果libvips的全局安装符合最低版本
      找不到要求;
  •   
  • 如果设置了~/.npm/_libvips/libvips-8.7.0-linux-x64.tar.gz环境变量。
  •   
SHARP_IGNORE_GLOBAL_LIBVIPS
     

是否需要手动下载并检查这些文件,
  您可以通过https://github.com/lovell/sharp-libvips/releases

进行操作      

如果要从自己的位置安装这些文件,请设置
  SHARP_IGNORE_GLOBAL_LIBVIPS=1 npm install sharp npm config选项,例如

sharp_dist_base_url
     

或设置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

所以这是一个背景,我知道这不能真正视为解决方案的答案:/

答案 1 :(得分:1)

如果有人到达这里却找不到答案-我的问题是我的项目使用的是旧节点版本(8.x)

解决方案是要安装Sharp的较旧版本-最新的支持8.x的版本-"sharp": "0.23.4"