2016-02-12 2 views
2

Я использую canvas package для Node.js.Canvas для Node.js работает локально, но не на сервере Heroku

Он отлично работает на моем компьютере, но он не работает, когда я загружаю его на сервер Heroku. «Прекрасно работает», я имею в виду, что пакет холста правильно установлен с npm install canvas, и приложение Node.js работает, как ожидалось.

Однако, когда я пытаюсь и загрузить его на Heroku и пытается построить пакет холст, я получаю ошибку:

$ 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:  > [email protected] 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! [email protected] install: `node-gyp rebuild` 
remote:  npm ERR! Exit status 1 
remote:  npm ERR! 
remote:  npm ERR! Failed at the [email protected] 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' 

Ошибка специфически в этих строках:

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. 

Однако эти проблемы не существуют в моей системе. Я искал решения других вопросов по этой проблеме, таких как this question и this question. Проблема в том, что оба они предназначены для локальных машин, и они не попадают на сервер, и поэтому я не мог исправить проблему на Heroku.

Возможное решение 1

Это выглядит так, как будто Heroku пытается заново строить все пакеты на своих собственных по этим линиям:

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

Я бы предположил, что если это Безразлично 't перестроить node_modules и просто использовать тот, который находится на моем компьютере (который работает), тогда он также будет работать на сервере. Есть ли способ остановить его от автоматического повторного строительства?

Возможное решение 2

Heroku позволяет запускать one-off dynos, такие как heroku run bash. Это открывает клиент bash, подключенный к серверу.

Я думал, что, возможно, я мог бы выполнить решения по другим вопросам, касающимся этой проблемы, непосредственно на сервере Heroku. Однако они являются очень ограничительными и не допускают доступа sudo, а не apt-get install. Есть ли способ обойти это?

Не стесняйтесь предоставлять дополнительные идеи. Спасибо за любые решения.

+0

http://stackoverflow.com/a/40310421/3310334 – theonlygusti

ответ

1

узловое полотно зависит от Cairo, графическая библиотека, написанная на C. Cairo, должна быть установлена ​​на любом сервере, который вы пытаетесь развернуть.

Если вы хотите развернуть в Heroku, вам, скорее всего, придется использовать собственный сборщик. Существует пример документации, как это сделать: https://github.com/Automattic/node-canvas/wiki/Installation-on-Heroku

+0

То, что мне нужно. Я не видел эту статью. Благодаря! –

+0

Рекомендация: не используйте репозиторий мультипакетов на этой странице виджета Node-Canvas. Вместо этого вы можете использовать официальный пакет Heroku: 'https: // github.com/heroku/heroku-buildpack-multi.git'. См. Инструкции здесь: https://elements.heroku.com/buildpacks/heroku/heroku-buildpack-multi#buildpack-instructions – taseenb

Смежные вопросы