Как заставить Heroku распознать пряжу.замок или пакет.json в подкаталоге (не root)

у меня есть приложение Rails, использующее React, Webpack и Yarn для клиентской стороны. У меня есть все, что связано с клиентской стороной в каталоге /client. Сюда входит и моя история.замка и пакета.файлы json. У меня есть Procfile, который компакт-диски в / client и правильно работает yarn run build. Это работает локально без ошибок. Однако, когда я развертываю / нажимаю на Heroku, мой толчок отклоняется, и я получаю следующую ошибку:

remote:        cd client && yarn run build:production
remote:        sh: 1: yarn: not found
remote:        rake aborted!
remote:        Command failed with status (127): [cd client && yarn run build:production...]

что это говорит мне о том, что Heroku не смог найти пряжа.заблокировать файл на корневом уровне. Как заставить Heroku использовать yarn.lock файл в моем каталоге / client?

или причина этой ошибки в чем-то другом?

6 ответов


только что сам прошел через подобное. Вам нужно заказать buildpacks, чтобы этот узел был первым. Если пряжа.блокировка находится в корневом каталоге (или yarn находится в вашем ключе "двигатели", как в ответе @remydib), затем узел buildpack установит yarn, а затем ваши пакеты. Если у вас есть yarn.lock in / client, поместите один в корень и добавьте postinstall скрипт к нему, который говорит cd client && yarn run build.

в моем случае (rake assets:precompile вызывает yarn и терпит неудачу), по какой-то причине, когда buildpacks идут ruby -> узел, Heroku не ждет установки узла, прежде чем пытаться запустить задачи rake, и мы идем kablooie.

надеюсь, что это помогает.


обязательно используйте как ruby, так и node buildpacks. Я получил эту ошибку, когда я этого не сделал.

выполните их в корневой папке:

heroku buildpacks:set heroku/ruby
heroku buildpacks:add --index 1 heroku/nodejs

источники:https://devcenter.heroku.com/articles/using-multiple-buildpacks-for-an-app

https://github.com/shakacode/react_on_rails/blob/master/docs/additional-reading/heroku-deployment.md


возможно, вы можете попробовать ввести пакет.в JSON

  "engines": {
    "node": "^6.9",
    "yarn": "^0.21"
  },

  1. использовать yarn для установки зависимостей приложения

    a)yarn.lock должен присутствовать в корне РЕПО. yarn install б) package-lock.json должны быть удалены git rm package-lock.json

  2. использовать npm

    a)yarn.lock должны быть удалены

источник: https://devcenter.heroku.com/articles/ruby-support#installed-binaries

https://docs.npmjs.com/files/package-lock.json


Я добавлю ответ для документа еще один возможный вариант использования. Я испытал что-то подобное, несколько buildpacks, и я проверил все во всех ответах:

  • node-js был объявлен сначала в
  • a yarn.lock был добавлен в корень проекта
  • зависимость пряжи, объявленная в разделе двигатели на package.json

тем не менее yarn не собирал, так как я использовал более старую версию node-js buildpack.


натыкаясь на версию buildpack последней решить мою проблему:

https://github.com/heroku/heroku-buildpack-nodejs#v118

вы можете сохранить оба пакета.json и yarn.блокировка путем добавления одного из них .слагиньор.

Он работает как .gitignore-он просто определяет, какие файлы игнорировать, нажимая на Heroku.

Проверьте дополнительную информацию здесь