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

Capistrano部署Rails应用遇生产环境密钥解密问题求助

解决Capistrano部署Rails应用时生产环境密钥缺失问题

问题本质

你碰到的是Rails 5.2+多环境凭据管理的核心问题:

  • 默认的credentials.yml.enc对应开发/测试环境,靠根目录的master.key解密
  • 生产环境的production.yml.enc需要专属的config/credentials/production.key解密,或通过环境变量RAILS_MASTER_KEY传入该密钥内容
    你现在有生产环境加密文件production.yml.enc,但缺少对应的解密密钥文件,导致部署时系统无法解密配置,抛出错误。

解决方案(两种可选)

方案一:适配多环境凭据配置

  1. 获取/生成production.key
    • 如果是你之前生成的production.yml.enc,找一下当时自动生成的config/credentials/production.key(注意这个文件不会自动提交仓库,可能在本地或备份里)
    • 找不到的话,重新生成生产环境凭据:
      rails credentials:edit --environment production
      
      命令执行后会自动创建production.key和production.yml.enc,编辑时填入生产环境需要的配置(比如secret_key_base),保存退出即可。
  2. 部署密钥到服务器
    • 不要把production.key提交Git!可以手动上传到服务器的config/credentials/目录,权限设为600(仅服务器用户可读)
    • 更安全的方式:在服务器环境变量中设置RAILS_MASTER_KEY,值就是production.key里的字符串内容。

方案二:简化为单凭据文件(适合新手)

如果不想用多环境拆分,直接统一用默认凭据:

  1. 合并生产环境配置到默认凭据
    运行命令打开默认凭据文件:
    rails credentials:edit
    
    添加生产环境配置:
    production:
      secret_key_base: 你的生产环境secret_key_base值
    
    保存退出。
  2. 更新服务器密钥配置
    • 在服务器设置环境变量RAILS_MASTER_KEY,值为本地根目录master.key里的内容
    • 或手动上传master.key到服务器根目录,权限设为600
  3. 调整secrets.yml(可选)
    你的secrets.yml生产环境用的是SECRET_KEY_BASE环境变量,可改成读取凭据:
    production:
      secret_key_base: <%= Rails.application.credentials.production[:secret_key_base] %>
    
    也可以直接删掉secrets.yml(Rails 5.2+官方推荐用credentials替代secrets.yml)。

关键注意事项

  • 所有密钥文件(master.key、production.key)绝对不能提交到Git仓库,确保.gitignore已包含这些文件
  • Capistrano不会自动上传密钥文件,需手动处理或用环境变量传递
  • 重新生成凭据后,要保证服务器上的加密文件和本地一致,密钥也要对应

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 05:34:58