Здесь я работаю над предпоследним проектом в моем учебном лагере по разработке программного обеспечения во Flatiron. Нам поручено создать приложение, используя рельсы в качестве серверной части и реагировать на нее как интерфейс. Я хотел убедиться, что все обновлено, прежде чем переходить к нашему проекту. Первые несколько часов все идет гладко. Мы с моим партнером по проекту решаем сначала создать интерфейсную и внутреннюю логику для наших пользовательских входов. Мы готовы запустить наш сервер rails и приложение для реагирования, чтобы увидеть, как идут дела. Я запускаю rails s в новом терминале, чтобы запустить мой сервер rails, и я запускаю npm start --prefix client в новом терминале, чтобы запустить свое приложение для реагирования. Наш сервер rails запускается без проблем, но я получил ошибку в нашем терминале от реакции.

opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
  library: 'digital envelope routines',
  reason: 'unsupported',
  code: 'ERR_OSSL_EVP_UNSUPPORTED'
}
Node.js v17.0.1

Я заметил эту ошибку ближе к концу длинного списка ошибок. Я решил немного погуглить и довольно быстро наткнулся на эту работу 9 дней назад. Я просто набрал в терминалеexport NODE_OPTIONS=--openssl-legacy-provider, и это сработало! Я могу запустить свое приложение с npm start --prefix client без проблем, и наше приложение идет хорошо!

Прошло еще несколько часов, мы добились приличного прогресса и говорим: «Эй, давайте развернем это на Heroku!». Здесь мы снова наталкиваемся на стену ошибок. Я смотрю журнал Heroku и замечаю в конце несколько очень знакомых строк кода.

opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
  library: 'digital envelope routines',
  reason: 'unsupported',
  code: 'ERR_OSSL_EVP_UNSUPPORTED'
}
Node.js v17.0.1

Это та же ошибка, что и при первом использовании npm start --prefix client! Я начинаю думать, что, возможно, что-то не работает с Node.js 17. Я немного погуглил и заметил, что Node.js 17 был выпущен 9 дней назад. В тот же день, когда было опубликовано наше исправление для npm start . Я прокручиваю список ошибок Heroku в поисках других подсказок. Я замечаю эти строки.

Installing binaries
remote:        engines.node (package.json):  16.x
remote:        engines.npm (package.json):   unspecified (use default)
remote:
remote:        Resolving node version 16.x...
remote:        Downloading and installing node 17.0.1...
remote:        Using default npm version: 8.1.0

Мы достигли этой части развертывания в Heroku, и вскоре после этого произошла ошибка, и мы вышли из строя. Я решил взглянуть на файл thepackage.json, указанный в развертывании Heroku, чтобы глубже заглянуть в код в поисках подсказок. Я вижу это внутри package.json.

{
"name": "phase-4-deploying-app-demo",
"description": "Build scripts for Heroku",
"engines": {
"node": "16.x"
},

Я пытаюсь жестко запрограммировать несколько других версий Node в package.json, но каждый раз, когда я запускал отправку на Heroku, он заставлял устанавливать Node.js 17. Это должно было быть проблемой! Поэтому я просто решил удалить все engines, включая {}. Я убеждаюсь, что в настоящее время не использую Node.js 17, набрав в терминалеnvm -v, что указывало на то, что я на самом деле 17 лет. Поэтому я набрал nvm list, чтобы просмотреть версии Node, которые я установил на свой компьютер, и заметил, что у меня было 16.4 .2 и использовал nvm use 16.4.2 для использования этой версии Node. Я еще раз добавил, подтвердил и подтолкнул к Heruko, но на этот раз с успехом!

Я подумал, что это может быть достойный блог, чтобы просто поделиться своими мыслями о том, как я нашел решение этой проблемы, так что, возможно, вы сможете использовать некоторые из тех же тактик, которые я использовал при решении ваших собственных проблем. На момент написания этого блога Heroku, наконец, не форсирует версию 17 Node.js, что, по всей вероятности, произошло несколько часов назад. Обязательно читайте свои ошибки и возвращайтесь к тем подсказкам, которые они дают вам! Удачи и удачного кодирования.