适用于Node.js的Canvas在本地工作,但不在Heroku服务器上 [英] Canvas for Node.js working locally but not on Heroku server

查看:108
本文介绍了适用于Node.js的Canvas在本地工作,但不在Heroku服务器上的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为Node.js使用画布包

I am using the canvas package for Node.js.

它在我的计算机上可以正常工作,但是当我将其上传到Heroku服务器时却无法工作。 工作正常是指使用 npm install canvas 正确安装的canvas软件包,Node.js应用程序按预期工作。

It works fine on my computer, but it does not work when I upload it to my Heroku server. By "works fine", I mean that the canvas package correctly installed with npm install canvas and the Node.js application works as expected.

但是,当我尝试将其上传到Heroku并尝试构建画布包时,出现错误:

However, when I try and upload it to Heroku and it tries to build the canvas package, I get the error:

$ git push heroku master
Counting objects: 4304, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (4028/4028), done.
Writing objects: 100% (4304/4304), 3.57 MiB | 606.00 KiB/s, done.
Total 4304 (delta 737), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Using set buildpack heroku/nodejs
remote: -----> Node.js app detected
remote:
remote: -----> Creating runtime environment
remote:
remote:        NPM_CONFIG_LOGLEVEL=error

remote:        NPM_CONFIG_PRODUCTION=true
remote:        NODE_ENV=production
remote:        NODE_MODULES_CACHE=true
remote:
remote: -----> Installing binaries
remote:        engines.node (package.json):  5.6.0
remote:        engines.npm (package.json):   3.7.2
remote:
remote:        Downloading and installing node 5.6.0...
remote:        Downloading and installing npm 3.7.2 (replacing version 3.6.0)...
remote:
remote: -----> Restoring cache
remote:        Skipping cache restore (new runtime signature)
remote:
remote: -----> Building dependencies
remote:        Prebuild detected (node_modules already exists)
remote:        Rebuilding any native modules
remote:
remote:        > canvas@1.3.10 install /tmp/build_565c08c270a791191b278953392f5493/node_modules/canvas
remote:        > node-gyp rebuild
remote:
remote:        make: Entering directory `/tmp/build_565c08c270a791191b278953392f5493/node_modules/canvas/build'
remote:        SOLINK_MODULE(target) Release/obj.target/canvas-postbuild.node
remote:        COPY Release/canvas-postbuild.node
remote:        CXX(target) Release/obj.target/canvas/src/Canvas.o
remote:        CXX(target) Release/obj.target/canvas/src/CanvasGradient.o
remote:        CXX(target) Release/obj.target/canvas/src/CanvasPattern.o
remote:        In file included from ../src/CanvasPattern.cc:9:0:
remote:        ../src/Image.h:19:21: fatal error: gif_lib.h: No such file or directory
remote:        #include <gif_lib.h>
remote:        ^
remote:        compilation terminated.

remote:        make: *** [Release/obj.target/canvas/src/CanvasPattern.o] Error 1
remote:        make: Leaving directory `/tmp/build_565c08c270a791191b278953392f5493/node_modules/canvas/build'
remote:        gyp ERR! build error
remote:        gyp ERR! stack Error: `make` failed with exit code: 2
remote:        gyp ERR! stack     at ChildProcess.onExit (/tmp/build_565c08c270a791191b278953392f5493/.heroku/node/lib/node_modules/npm/node_module
s/node-gyp/lib/build.js:276:23)
remote:        gyp ERR! stack     at emitTwo (events.js:100:13)
remote:        gyp ERR! stack     at ChildProcess.emit (events.js:185:7)
remote:        gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)
remote:        gyp ERR! System Linux 3.13.0-71-generic
remote:        gyp ERR! command "/tmp/build_565c08c270a791191b278953392f5493/.heroku/node/bin/node" "/tmp/build_565c08c270a791191b278953392f5493/.h
eroku/node/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
remote:        gyp ERR! cwd /tmp/build_565c08c270a791191b278953392f5493/node_modules/canvas
remote:        gyp ERR! node -v v5.6.0
remote:        gyp ERR! node-gyp -v v3.2.1
remote:        gyp ERR! not ok
remote:
remote:        npm ERR! Linux 3.13.0-71-generic
remote:        npm ERR! argv "/tmp/build_565c08c270a791191b278953392f5493/.heroku/node/bin/node" "/tmp/build_565c08c270a791191b278953392f5493/.hero
ku/node/bin/npm" "rebuild"
remote:        npm ERR! node v5.6.0
remote:        npm ERR! npm  v3.7.2
remote:        npm ERR! code ELIFECYCLE
remote:        npm ERR! canvas@1.3.10 install: `node-gyp rebuild`
remote:        npm ERR! Exit status 1
remote:        npm ERR!
remote:        npm ERR! Failed at the canvas@1.3.10 install script 'node-gyp rebuild'.
remote:        npm ERR! Make sure you have the latest version of node.js and npm installed.
remote:        npm ERR! If you do, this is most likely a problem with the canvas package,
remote:        npm ERR! not with npm itself.
remote:        npm ERR! Tell the author that this fails on your system:
remote:        npm ERR!     node-gyp rebuild

remote:        npm ERR! You can get information on how to open an issue for this project with:
remote:        npm ERR!     npm bugs canvas
remote:        npm ERR! Or if that isn't available, you can get their info via:
remote:        npm ERR!     npm owner ls canvas
remote:        npm ERR! There is likely additional logging output above.
remote:
remote:        npm ERR! Please include the following file with any support request:
remote:        npm ERR!     /tmp/build_565c08c270a791191b278953392f5493/npm-debug.log
remote:
remote: -----> Build failed
remote:
remote:        We're sorry this build is failing! You can troubleshoot common issues here:
remote:        https://devcenter.heroku.com/articles/troubleshooting-node-deploys
remote:
remote:        Some possible problems:
remote:
remote:        - node_modules checked into source control
remote:        https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git

remote:
remote:        Love,
remote:        Heroku
remote:
remote:
remote:  !     Push rejected, failed to compile Node.js app
remote:
remote: Verifying deploy...
remote:
remote: !       Push rejected to colladraw.
remote:
To https://git.heroku.com/colladraw.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/colladraw.git'

错误特别是在以下几行:

The error is specifically in these lines:

In file included from ../src/CanvasPattern.cc:9:0:
remote:        ../src/Image.h:19:21: fatal error: gif_lib.h: No such file or directory
remote:        #include <gif_lib.h>

remote:        ^
remote:        compilation terminated.

但是,这些问题在我的系统上不存在。我摆弄了有关此问题的其他问题的解决方案,例如此问题此问题。问题是这两个都是针对本地计算机的,它们没有被推送到服务器,因此我无法在Heroku上解决问题。

These problems do not exist on my system, however. I fiddled around with solutions from other questions regarding this issue, such as this question and this question. The problem is that both of these are for the local machines, and they do not get pushed to the server, and therefore I could not fix the problem on Heroku.

可能的解决方案1 ​​

似乎Heroku试图根据以下内容自行重建所有软件包:

It looks as though Heroku is trying to re-build all of the packages on its own according to these lines:

remote: -----> Building dependencies
remote:        Prebuild detected (node_modules already exists)
remote:        Rebuilding any native modules

我猜想,如果它不重建 node_modules 而只使用我计算机上的一个(正在运行),那么它也可以在服务器。有什么方法可以阻止它自动重建吗?

I would guess that if it doesn't re-build node_modules and just uses the one from my computer (that is working), then it would also work on the server. Is there any way to stop it from automatically re-building?

可能的解决方案2

Heroku允许您运行一次性dynos ,例如 heroku run bash 。这样会打开一个连接到服务器的bash客户端。

Heroku allows you to run one-off dynos, such as heroku run bash. This opens a bash client connected to the server.

我在想,也许我可以直接在Heroku服务器上执行有关此问题的其他问题的解决方案。但是,它们非常严格,不允许 sudo 访问,也不允许 apt-get install 。有什么办法可以避免这种情况?

I was thinking that maybe I could perform the solutions from the other questions regarding this issue directly on the Heroku server. However, they are very restrictive and do not allow sudo access nor apt-get install. Is there any way to circumvent this?

随意提供其他想法。谢谢您的解决方案。

Feel free to provide additional ideas. Thanks for any solutions.

推荐答案

节点画布取决于开罗,用C. Cairo编写的图形库必须安装在要部署到的任何服务器上。

node-canvas depends on Cairo, a graphics library written in C. Cairo must be installed on whatever server you are trying to deploy to.

如果要部署到Heroku,则可能必须使用自定义构建包。这里提供了有关如何执行此操作的示例文档: https://github.com。 com / Automattic / node-canvas / wiki / Heroku安装

If you want to deploy to Heroku, you'll likely have to use a custom build pack. There is example documentation for how to do that here: https://github.com/Automattic/node-canvas/wiki/Installation-on-Heroku

这篇关于适用于Node.js的Canvas在本地工作,但不在Heroku服务器上的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆