Здесь я работаю над предпоследним проектом в моем учебном лагере по разработке программного обеспечения во 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, что, по всей вероятности, произошло несколько часов назад. Обязательно читайте свои ошибки и возвращайтесь к тем подсказкам, которые они дают вам! Удачи и удачного кодирования.