Не удалось развернуть приложение node.js для heroku

Я пытаюсь развернуть простую node.js-экспресс-приложение на герою, что, по-видимому, очень простое: https://devcenter.heroku.com/articles/nodejs

Вот мой package.json:

{
  "name": "cours-lic3-blois",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node app"
  },
  "dependencies": {
    "express": "*",
    "ejs": "*",
    "github-flavored-markdown": "*",
    "less-middleware": "*"
  },
  "engines": {
    "node": "0.8.8",
    "npm": "1.1.65"
  }
}

Когда я git push heroku master, я получил следующую трассировку:

 -----> Heroku receiving push
 -----> Node.js app detected
 -----> Resolving engine versions
        Using Node.js version: 0.8.8
        Using npm version: 1.1.65
 -----> Fetching Node.js binaries
 -----> Vendoring node into slug
 -----> Installing dependencies with npm
        npm ERR! Error: ENOENT, chmod '/tmp/build_1suuxlhd9s8n6/node_modules/express/bin/express'
        npm ERR! If you need help, you may report this log at:
        npm ERR!     <http://github.com/isaacs/npm/issues>
        npm ERR! or email it to:
        npm ERR!     <[email protected]>

        npm ERR! System Linux 2.6.32-348-ec2
        npm ERR! command "/tmp/node-node-tonf/bin/node" "/tmp/node-npm-NG88/cli.js" "rebuild"
        npm ERR! cwd /tmp/build_1suuxlhd9s8n6
        npm ERR! node -v v0.8.8
        npm ERR! npm -v 1.1.65
        npm ERR! path /tmp/build_1suuxlhd9s8n6/node_modules/express/bin/express
        npm ERR! code ENOENT
        npm ERR! errno 34
        npm ERR!
        npm ERR! Additional logging details can be found in:
        npm ERR!     /tmp/build_1suuxlhd9s8n6/npm-debug.log
        npm ERR! not ok code 0
  !     Failed to rebuild dependencies with npm
  !     Heroku push rejected, failed to compile Node.js app

 To [email protected]:fast-everglades-2007.git
  ! [remote rejected] master -> master (pre-receive hook declined)
 error: failed to push some refs to '[email protected]:fast-everglades-2007.git'

Я попытался настроить различные версии в моем пакете. json, но безрезультатно. Я разрабатываю окна и, возможно, эта проблема ENOENT возникает из-за проблемы с файловым файлом.

Ответ 1

У меня это исправлено:

  • Убедитесь, что Procfile зафиксирован в git

  • Удаление папки node_modules/и ее фиксация в git (git rm -r node_modules/)

Впоследствии я сделал мастер-героя git, затем ошибка исчезла.

Ответ 2

У меня была эта проблема, и это было потому, что:

  • Я сохраняю node_modules в управлении версиями
  • У меня bin в моем .gitignore файле

npm пытался выполнить chmod express/bin/express, но из-за моего .gitignore этот файл не был в git и, следовательно, он не клонировался во время развертывания, поэтому он не удался. Я не заметил этого, потому что локальная установка npm создала бы файл bin/express, как обычно.

Удаление bin из .gitignore и передача недостающих файлов решить проблему для меня.

Ответ 3

Команда Heroku, вы можете подумать о настройке npm для использования npm install --no-bin-links --production по умолчанию или создании переменной среды, чтобы пользователи могли установить этот флаг. Это серьезная ошибка в установках node. Удаление каталога bin из моего .gitignore (как было предложено ниже) позволило мне развернуть, но он эффективно использует git в кросс-платформенной среде разработки, требуя явного восстановления npm на каждом тэге git, где node_modules возможно, изменились.

Наилучшая практика NPM заключается в том, чтобы избежать node_modules в .gitignore (см. http://www.futurealoof.com/posts/nodemodules-in-git.html).

Я полагаю, что --no-bin-links обеспечит лучшее из обоих миров, позволяя развертывать node_modules, где каталог bin был исключен, поддерживая восстановление npm, но не прерываясь при создании ссылки bin.

Я отправил запрос на перенос здесь: https://github.com/heroku/heroku-buildpack-nodejs/pull/33

Спасибо!

Ответ 4

Аналогичная проблема была исправлена ​​переименованием gruntfile.js в Gruntfile.js