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

Rails 6正确使用config/credentials及禁用/tmp/development_secret方法

Rails多环境凭证配置方案

核心问题解答

1. secret_key_base的配置逻辑

Rails 6+默认的凭证加载优先级为:当前环境专属凭证 > 全局凭证,同名key会被优先级更高的配置覆盖。
建议为每个环境单独配置独立的secret_key_base,避免开发/测试环境的密钥泄露影响生产环境安全,全局凭证无需存放环境敏感的secret_key_base字段。

2. tmp/development_secret自动生成问题解决

Rails开发、测试环境默认逻辑为:如果未找到显式配置的secret_key_base,会自动生成tmp/development_secret.txt临时文件兜底,导致环境凭证中的配置不生效,可按以下步骤关闭该逻辑:

  • 首先确认编辑环境凭证的命令正确,确保对应环境的yml.enc中存在正确配置:
    编辑开发环境凭证命令:EDITOR="vim" bin/rails credentials:edit --environment development
    编辑完成后确保文件内包含配置:secret_key_base: 你的自定义密钥串
  • 新增配置关闭自动生成临时密钥逻辑,在config/application.rb中添加:
    config.secret_key_base = Rails.application.credentials.secret_key_base
    
  • 删除已生成的tmp/development_secret.txt文件,重启Rails服务即可,后续不会再自动生成该文件,会直接读取环境凭证中的配置。

全局credentials.yml.enc的加载规则

  • 加载时机:Rails启动时会先解密加载全局config/credentials.yml.enc,再加载当前运行环境对应的config/credentials/[环境].yml.enc,环境配置会覆盖全局的同名key。
  • 作用:存放全环境通用的敏感配置,例如不区分环境的第三方服务公钥、全局加密规则盐值等,如无通用配置需求可以直接删除全局凭证文件,仅保留各环境专属凭证即可。

统一调用&版本控制配置

  • 所有环境统一使用Rails.application.credentials.配置key的方式调用凭证,生产、开发测试环境逻辑完全一致,不会出现环境兼容问题。
  • 版本控制忽略规则:在.gitignore中添加以下内容,避免密钥文件提交:
    /config/master.key
    /config/credentials/*.key
    
    所有.yml.enc加密后的凭证文件可以正常提交到版本库,只有持有对应密钥的人员可以解密查看,符合生产密钥仅限少数人获取的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:36:04