ROR7部署VPS(Nginx+Passenger)遇secret_key_base缺失错误
解决Rails 7部署时
secret_key_base缺失的问题 问题根源
你当前的credentials配置让production环境从环境变量SECRET_KEY_BASE读取密钥,但VPS的production环境既没设置这个变量,Passenger/Nginx也没加载到它,导致Rails找不到密钥。另外,你同时在根级和production节点配置了secret_key_base,Rails会优先使用环境节点下的配置,进一步加剧了变量缺失的问题。
两种解决方法,任选其一即可:
方法1:直接在credentials中写入production密钥
- 重新编辑production环境的凭据文件:
RAILS_ENV=production EDITOR=nano rails credentials:edit - 删除
production:节点(或直接在该节点下写入实际密钥字符串,放弃环境变量方式),修改后的内容示例:# Used as the base secret for all MessageVerifiers in Rails, including the one protecting cookies. secret_key_base: 你的实际密钥字符串 - 保存退出后,Rails会自动加密该文件。部署时需将加密后的
config/credentials/production.yml.enc和对应的config/credentials/production.key一同上传到VPS(注意production.key需保密,禁止提交到版本库)。
方法2:在VPS上配置Passenger可读取的环境变量
- 若坚持使用环境变量方式,需确保Passenger能获取到
SECRET_KEY_BASE:- 本地生成一个合法密钥:
rails secret - 打开Nginx站点配置文件(如
/etc/nginx/sites-available/你的站点.conf),在server块内添加:passenger_env_var SECRET_KEY_BASE "你刚生成的密钥字符串"; - 重启Nginx和Passenger使配置生效:
sudo systemctl restart nginx sudo passenger-config restart-app /你的应用部署路径
- 本地生成一个合法密钥:
额外注意事项
- 切勿将
*.key类型文件提交至Git仓库,这类文件是解密凭据的核心密钥,必须严格保密。 - 部署时要确保
config/credentials/production.yml.enc和对应的production.key都存在于服务器的应用目录中。
内容的提问来源于stack exchange,提问作者BrownKid
相关产品推荐
相关产品推荐

