You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails生产环境部署报错:缺失secret_key_base,如何排查?

排查步骤

1. 验证master.key的位置与权限

  • 确认生产服务器上的master.key放在项目的config/目录下,执行命令检查:ls /path/to/your/production/app/config/master.key
  • 设置正确的文件权限(Rails需要可读权限,通常设为600):chmod 600 /path/to/your/production/app/config/master.key
  • 确保文件所有者与部署/运行Rails进程的用户一致,比如部署用户为deploy:chown deploy:deploy /path/to/your/production/app/config/master.key

2. 核对credentials.yml.enc文件一致性

  • master.key是用来解密credentials.yml.enc的,两个文件必须配对使用。分别在开发和生产服务器执行md5校验,确认文件内容一致:
    • 开发服务器:md5sum config/credentials.yml.enc
    • 生产服务器:md5sum /path/to/your/production/app/config/credentials.yml.enc
  • 若不一致,重新从开发服务器复制credentials.yml.enc到生产服务器的config目录。

3. 检查部署过程中master.key是否丢失/被覆盖

  • 查看Capistrano的deploy.rb配置,确认是否有自动清理或覆盖config目录文件的任务,避免master.key被误删。
  • 部署完成后立即检查当前发布目录的master.key:cat /path/to/your/production/app/current/config/master.key,对比开发服务器的master.key内容是否一致。

4. 直接验证Rails能否读取secret_key_base

  • 在生产服务器的项目目录下执行命令,测试是否能读取到credentials中的secret_key_base:
    RAILS_ENV=production bundle exec rails runner "puts Rails.application.credentials.secret_key_base"
    
  • 若返回空或报错,说明master.key与credentials.yml.enc不匹配,或文件权限存在问题。

5. 排查环境变量冲突

  • 检查生产服务器是否设置了RAILS_MASTER_KEY环境变量,该变量会覆盖config/master.key的作用:echo $RAILS_MASTER_KEY
  • 若存在该变量,确认其值与master.key一致;若不需要则取消该环境变量。

6. 确认预编译资产的环境上下文

  • 查看deploy.rb中针对deploy:assets:precompile的自定义配置,确认是否有强制设置的环境变量导致master.key无法被读取。

内容的提问来源于stack exchange,提问作者js7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 22:20:02