将Rails 7.x应用部署到Heroku时遇ERR_OSSL_EVP_UNSUPPORTED错误求助
解决Rails 7.x部署Heroku时资产预编译的OpenSSL错误
这个错误的核心原因是Node.js 18+默认使用OpenSSL 3.0,而Webpack等资产编译工具依赖的旧哈希算法(如MD4)在OpenSSL 3.0中被标记为不安全并禁用,导致资产预编译失败。以下是几种可行的解决方法:
方法1:启用OpenSSL兼容模式
通过设置Node环境变量,强制使用旧版OpenSSL提供器,兼容原有哈希算法:
- 使用Heroku CLI直接配置环境变量:
heroku config:set NODE_OPTIONS="--openssl-legacy-provider" - 或者修改项目根目录的
package.json,在build脚本中添加参数:"scripts": { "build": "NODE_OPTIONS='--openssl-legacy-provider' rails assets:precompile" }
方法2:降级Node.js版本到16.x
Node.js 16.x默认使用OpenSSL 1.1.1,不存在这个兼容性问题:
- 在项目根目录创建
.node-version文件,写入指定版本:16.20.0 - 或者在
package.json中声明Node版本要求:"engines": { "node": "16.x" }
方法3:升级Webpack到适配OpenSSL 3.0的版本
新版Webpack已经修复了OpenSSL 3.0的兼容性问题,直接更新依赖即可:
npm update webpack # 若使用yarn则执行:yarn upgrade webpack
完成上述任一配置后,重新推送代码到Heroku即可完成部署:
git push heroku main
内容的提问来源于stack exchange,提问作者Mark Locklear
相关产品推荐
相关产品推荐

