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

Rails 6如何配置开发测试环境共享、不重复且生产不可用的凭证?

解决方案

Rails 的多环境凭证本身支持自定义加载逻辑,你可以通过以下两种方式实现需求,两种都不会产生重复配置,且生产环境不会读取到开发/测试的共享凭证:

方案1:创建共享凭证文件,配置开发/测试环境统一加载

这是最规范的实现方式:

  1. 首先创建一个共享的凭证文件,命名为 shared(也可以自定义为 dev_test 这类更明确的名字):
EDITOR="subl --wait" rails credentials:edit --environment shared

把你之前写在 development 凭证里的 vonage 等需要共享的配置全部写到这个 shared 凭证文件里,保存后会自动生成 config/credentials/shared.yml.enc 和对应的密钥文件 config/credentials/shared.key
2. 修改 config/application.rb,添加凭证加载的判断逻辑:

config.credentials.content_path = if Rails.env.development? || Rails.env.test?
  Rails.root.join("config/credentials/shared.yml.enc")
else
  Rails.root.join("config/credentials/production.yml.enc")
end

config.credentials.key_path = if Rails.env.development? || Rails.env.test?
  Rails.root.join("config/credentials/shared.key")
else
  Rails.root.join("config/credentials/production.key")
end
  1. (可选)你可以把之前单独创建的 config/credentials/development.yml.enc 和对应密钥删掉,避免配置冲突。

配置完成后开发和测试环境都会读取 shared 凭证里的配置,生产环境还是走独立的凭证逻辑,完全不会读到共享内容,也没有重复配置。

方案2:配置测试环境直接复用开发环境凭证

如果你不想额外创建 shared 凭证,也可以直接让测试环境加载已经存在的开发环境凭证,只需要修改 config/application.rb 添加逻辑即可:

if Rails.env.test?
  config.credentials.content_path = Rails.root.join("config/credentials/development.yml.enc")
  config.credentials.key_path = Rails.root.join("config/credentials/development.key")
end

这种方式改动更少,不需要迁移现有配置,同样满足生产环境不会读取开发凭证的要求。

验证方法

配置完成后重启 Rails 控制台,分别在开发和测试环境执行 Rails.application.credentials.vonage 都能返回正确值,生产环境执行不会返回开发测试的共享配置。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:27:01