Rails 6.1.3 Heroku部署失败,修复babel问题仍报错求解决
解决Rails 6.1.3 + Ruby 3.0.1部署Heroku时的资产预编译失败问题
核心错误:error:0308010C:digital envelope routines::unsupported
该错误是Node.js 17+默认启用新OpenSSL哈希算法,而项目依赖的compression-webpack-plugin版本不兼容导致的,是资产预编译失败的直接原因,优先处理:
方案1:指定兼容的Node.js版本
Heroku默认会使用较新版本的Node,我们可以强制指定与Rails 6.1.x兼容的16.x版本:
- 在项目根目录创建
.nvmrc文件,写入:16.20.2 - 或者在
package.json中添加engines字段:
"engines": { "node": "16.x", "yarn": "1.x" }
提交修改后重新推送到Heroku,平台会自动安装指定版本的Node。
方案2:启用OpenSSL Legacy Provider
若不想修改Node版本,可通过环境变量让Node使用旧哈希算法:
- 登录Heroku控制台,进入项目「Settings」→「Config Vars」,添加变量:
- 键:
NODE_OPTIONS - 值:
--openssl-legacy-provider
- 键:
- 或通过Heroku CLI执行:
heroku config:set NODE_OPTIONS="--openssl-legacy-provider"
次要警告:autoprefixer color-adjust弃用
该警告不影响编译,但可按需消除:
方案1:直接修改代码
找到报错的scss文件(application.scss、chat.scss),将color-adjust替换为print-color-adjust。
方案2:关闭警告(适用于第三方库引入的情况)
若该属性来自第三方依赖无法直接修改,可在PostCSS配置中关闭该警告:
- 在项目根目录创建或修改
postcss.config.js:
module.exports = { plugins: [ require('autoprefixer')({ deprecationWarnings: false }) ] };
内容的提问来源于stack exchange,提问作者Jaymarc San Luis
相关产品推荐
相关产品推荐

