Я использую 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
. Есть ли способ обойти это?
Не стесняйтесь предоставлять дополнительные идеи. Спасибо за любые решения.
http://stackoverflow.com/a/40310421/3310334 – theonlygusti