Rails 7部署Heroku遇加密错误,WSL/Windows跨环境问题求助
问题原因
核心原因是Windows与WSL2 Ubuntu环境的OpenSSL配置/版本差异,导致Rails凭据系统生成的加密文件无法跨环境解密:
- Rails的
credentials.yml.enc和master.key依赖OpenSSL的加密算法、密钥派生逻辑生成。Windows和WSL2的OpenSSL默认参数(如加密套件、哈希算法)不一致,跨环境使用对方生成的凭据文件时,解密过程会失败,抛出ActiveSupport::MessageEncryptor::InvalidMessage或OpenSSL::Cipher::CipherError错误。
解决调整步骤
统一凭据生成环境
选择一个固定环境(优先用WSL2 Ubuntu,因为Heroku的运行环境是Linux,更匹配)生成和编辑凭据:- 删除项目中现有冲突的
config/credentials.yml.enc和config/master.key文件 - 在WSL2环境进入项目目录,执行
rails credentials:edit生成新的凭据文件 - 将生成的
master.key同步到Windows本地项目的config目录(可通过WSL共享路径访问:\\wsl$\Ubuntu-20.04\你的项目路径\config\master.key)
- 删除项目中现有冲突的
配置Heroku的密钥环境变量
不要将master.key提交到Git,而是通过Heroku环境变量传递密钥:
在WSL2环境执行命令:heroku config:set RAILS_MASTER_KEY=$(cat config/master.key)该命令会读取本地
master.key的内容,设置为Heroku的RAILS_MASTER_KEY环境变量,确保Heroku能正确解密凭据。验证本地与部署环境的一致性
- Windows本地启动服务器前,确认
config/master.key与WSL2生成的完全一致 - 重新执行
git push heroku master部署,确保Heroku使用正确的密钥解密凭据
- Windows本地启动服务器前,确认
保障密钥安全
检查项目根目录的.gitignore文件,确保包含config/master.key规则,防止密钥被提交到代码仓库泄露。
内容的提问来源于stack exchange,提问作者Elena
相关产品推荐
相关产品推荐

