Как заставить Heroku распознавать yarn.lock или package.json в подкаталоге (не в корне)

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

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 не удалось найти файл yarn.lock на корневом уровне. Как заставить Heroku использовать файл yarn.lock в моем каталоге /client?

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


person Doug    schedule 25.03.2017    source источник


Ответы (6)


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

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

Надеюсь это поможет.

person fkotsian    schedule 27.05.2017
comment
Оно работает. Но мне интересно, почему мы должны ставить пакеты сборки NodeJS на первое место? - person hiveer; 07.07.2018
comment
@hiveer Пакет сборки NodeJS необходим, чтобы убедиться, что узел и npm/yarn доступны. - person Matt Sanders; 11.08.2020

Убедитесь, что вы используете пакеты сборки ruby ​​и node. Я получил эту ошибку, когда я этого не сделал.

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

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

person remydib    schedule 02.04.2017

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

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

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

    а) yarn.lock следует удалить

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

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

person Pav31    schedule 11.08.2017

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

  "engines": {
    "node": "^6.9",
    "yarn": "^0.21"
  },
person YuTin    schedule 28.03.2017

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

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

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


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

https://github.com/heroku/heroku-buildpack-nodejs#v118
person a--m    schedule 26.02.2018

Вы можете сохранить как package.json, так и yarn.lock, добавив один из них в .slugignore.

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

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

person Yurii Halapup    schedule 10.04.2018