はじめに
このエラー解決方法の解説記事は世の中に溢れています。
ですが記事通りに設定したのに何故かデプロイ出来なくて沼りました。
自分と同じ状況の助けになれば幸いです!
バージョン
- Ruby 2.7.7
- Rails 6.0.6.1
- Mac OS
結論
ターミナルで下記実行する。
heroku config:set NODE_OPTIONS='--openssl-legacy-provider'
※Heroku CLIのインストールが前提
https://devcenter.heroku.com/ja/articles/config-vars#using-the-heroku-cli
そもそも公式が解決方法を提示している
https://github.com/webpack/webpack/issues/14532
公式より回避策として下記を実行しろ、と書いてあります。
export NODE_OPTIONS=--openssl-legacy-provider
しかし実行してもエラーが消えず、Node.jsのバージョンをいじったり色々しました。。。
コマンドの意味
そもそも解決方法のコマンドが何をしているか理解していませんでした。
調べてみると、'NODE_OPTIONS'という環境変数に'--openssl-legacy-provider'を設定しているようです。
環境変数については下記で学びました。Linux基礎勉強不足。。
https://wa3.i-3-i.info/word11027.html
https://linuc.org/textbooks/linux/
結局何が起きているのか
2023.11月時点ではHerokuのNode.jsのバージョンがv20.9.0となっています。
v17.0以降だとOpenSSLの大きな変更があり、これがwebpackerに対応していないようです。
だから、前の方法でOpenSSL使ってね!という意味で環境変数を変更するコマンドを叩いていました。
しかし公式が提示しているコマンドを叩くだけだと、Heroku側の環境変数が変更されていない為Herokuで用意されているコマンドを追加して設定する必要がありました。
最後に
環境変数の概念を理解していなかった事が最大の要因でした。(ローカルとHerokuで環境変数を別に設定する概念がなかった)
分かる人にはレベルの低い話だと思いますが、一つずつ強くなっていきます!