Подтвердить что ты не робот

Используйте зависимости Git с npm и Node на Heroku

У меня есть файл package.json:

{
    "name": "application-name"
  , "version": "0.0.1"
  , "private": true
  , "dependencies": {
      "coffee-script": "1.1.3"
    , "express": "2.5.0"
    , "less": "1.1.5"
    , "jade": "0.17.0"
    , "connect-redis": "1.2.0"
    , "hiredis": "0.1.13"
    , "redis": "0.7.1"
    , "bcrypt": "0.4.1"
    , "promised-io": "0.3.0"
    , "jugglingdb": "git://github.com/juggy/jugglingdb.git#master"
    , "nodemailer": "0.2.3"
  }
}

и я хочу развернуть его в Heroku. Он отлично работает локально с npm версии 1.0.105, но он задыхается от Heroku (я обновил номер npm там до 1.0.105):

   -----> Heroku receiving push
   -----> Fetching custom build pack... done
   -----> Node.js app detected
   -----> Fetching Node.js binaries
   -----> Vendoring node 0.4.7
   -----> Installing dependencies with npm 1.0.105
          npm ERR! git checkout master fatal: Not a git repository: '.'
          npm ERR! Error: `git "checkout" "master"` failed with 128
          npm ERR!     at ChildProcess.<anonymous> (/tmp/node-npm-Jb2d/lib/utils/exec.js:49:20)
          npm ERR!     at ChildProcess.emit (events.js:67:17)
          npm ERR!     at ChildProcess.onexit (child_process.js:192:12)
          npm ERR! Report this *entire* log at:
          npm ERR!     <http://github.com/isaacs/npm/issues>
          npm ERR! or email it to:
          npm ERR!     <[email protected]>
          npm ERR! 
          npm ERR! System Linux 2.6.32-316-ec2
          npm ERR! command "/tmp/node-node-C3jD/bin/node" "/tmp/node-npm-Jb2d/cli.js" "install"
          npm ERR! cwd /tmp/build_2yzg7lk83o5m9
          npm ERR! node -v v0.4.7
          npm ERR! npm -v 1.0.105
          npm ERR! git checkout master fatal: Not a git repository: '.'
          npm ERR! 
          npm ERR! Additional logging details can be found in:
          npm ERR!     /tmp/build_2yzg7lk83o5m9/npm-debug.log
          npm not ok
    !     Failed to install dependencies with npm
    !     Heroku push rejected, failed to compile Node.js app 

Кроме того, я, похоже, не нашел способ получить доступ к этому файлу журнала в /tmp.

Как кому-то удастся установить зависимость Git от Heroku (отлично работает на стороне ruby: P)?

4b9b3361

Ответ 1

Проблема заключается в их nodejs buildpack. Я послал запрос на тягу к Хероку с исправлением, но я понятия не имею, когда или когда они ответят. К счастью, существует не очень хорошо документированный метод использования настраиваемого пакета buildpack, который позволит вам обойти проблему. Я разветкил heroku nodejs buildpack и исправил проблему - здесь:

https://github.com/chrisleishman/heroku-buildpack-nodejs/tree/git_fix

Чтобы использовать это, лучше всего создать свою собственную вилку github https://github.com/heroku/heroku-buildpack-nodejs и затем слить ее в ветвь chrisleishman/git_fix. Например. (после разветвления):

git clone [email protected]:@[email protected]/heroku-buildpack-nodejs.git
cd heroku-buildpack-nodejs
git remote add chrisleishman git://github.com/chrisleishman/heroku-buildpack-nodejs.git
git fetch chrisleishman
git merge chrisleishman/git_fix
git push

Затем вы можете добавить переменную config BUILDPACK_URL в ваше приложение heroku. Например.

heroku config:add BUILDPACK_URL="git://github.com/@[email protected]/heroku-buildpack-nodejs.git

Следующий push to heroku должен затем использовать настраиваемый buildpack, содержащий исправление.

Ответ 2

FYI, если на GitHub вы можете просто указать username/repository, а npm сделает все остальное.

{
    "name": "application-name"
  , "version": "0.0.1"
  , "private": true
  , "dependencies": {
      "coffee-script": "1.1.3"
    , "express": "2.5.0"
    , "less": "1.1.5"
    , "jade": "0.17.0"
    , "connect-redis": "1.2.0"
    , "hiredis": "0.1.13"
    , "redis": "0.7.1"
    , "bcrypt": "0.4.1"
    , "promised-io": "0.3.0"
    , "jugglingdb": "juggy/jugglingdb"
    , "nodemailer": "0.2.3"
  }
}

В качестве альтернативы

Укажите один из (git/git+ssh/git+http/git+https) ://[email protected]/repo.git URL

Полностью документально

Ответ 3

Я не знаю об этом пакете, но у меня есть другие, чтобы работать с синтаксисом, как показано ниже. На геройку, используя ссылку http на tar.gz

package.json:

{
    "name": "application-name"
  , "version": "0.0.1"
  , "private": true
  , "dependencies": {
      "coffee-script": "1.1.3"
    , "express": "2.5.0"
    , "less": "1.1.5"
    , "jade": "0.17.0"
    , "connect-redis": "1.2.0"
    , "hiredis": "0.1.13"
    , "redis": "0.7.1"
    , "bcrypt": "0.4.1"
    , "promised-io": "0.3.0"
    , "jugglingdb": "https://github.com/juggy/jugglingdb/tarball/master"
    , "nodemailer": "0.2.3"
  }
}

Ответ 4

Обратите внимание, что вы можете указать commit-ish, чтобы выбрать, какой commit/branch/... вы хотите установить, в форме "user/foo-project#commit-ish", см. doc.

Пример:

"dependencies": {
    "express": "visionmedia/express#some-branch",
    "mocha": "visionmedia/mocha#4727d357ea"
}

Ответ 5

Не уверен, что эта же проблема была в эту дату, но у меня возникло одно сообщение об ошибке, и я обнаружил, что смог разрешить его, явно указав версию node и npm для этой страницы:

https://devcenter.heroku.com/articles/nodejs-versions

Ответ 6

У меня была аналогичная проблема, за исключением того, что я ссылался на частный репозиторий git. Моим решением для этого было добавить postinstall script для следующего:

{
    "postinstall": "npm update && npm install package-name"
}

Обновление и установка делают npm обновлением частного репо до последнего. (https://github.com/npm/npm/issues/1727)

Ответ 7

Если кто-то борется с этим, используя npm 5+ (где package-lock.json - вещь), убедитесь, что вы устанавливаете пакет через командную строку.

npm i my_package --save https://github.com/username/repo/archive/v6.5.2.tar.gz

По состоянию на NPM 5.0.3 просто добавив его в package.json и запустив npm i не будет обновлять package-lock.json (grrr).