对于上下文,我正在将Rails应用程序更新为5.2,然后更新为6.0。
我正在更新我的凭据,以在Rails 5.2+应用程序中使用默认的config/credentials.yml.enc
和config/master.key
。
Rails docs状态:
在测试和开发应用程序中,获取从应用程序名称派生的secret_key_base。其他环境必须使用
config/credentials.yml.enc
中存在的随机密钥 (强调)
这使我认为,在生产中,需要{strong> 才能通过SECRET_KEY_BASE
从Rails.application.credentials.secret_key_base
读取config/credentials.yml.enc
值。在test
和development
环境中,secret_base_key
本质上是“无关的”,因为它是根据应用程序名称计算的。
但是,当我看着Rails source code时,它显示为:
def key
read_env_key || read_key_file || handle_missing_key
end
这似乎表示读取值的顺序是:
-
ENV["SECRET_BASE_KEY"]
-
Rails.application.credentials.secret_base_key
- 引发错误
我使用Heroku进行托管,并有一个ENV["SECRET_BASE_KEY"]
env变量来存储此秘密值。
问题
- 如果我同时设置了
ENV["SECRET_BASE_KEY"]
和Rails.application.credentials.secret_base_key
,哪个优先? - 是否会在某个时候不赞成使用ENV变量?
- 我有很多特定于环境的ENV变量,因为我不想在开发中使用生产账户来使用AWS S3存储桶,条带账户等。
credentials.yml.enc
的平面文件格式似乎假定开发人员只需要在生产中访问这些第三方API。在Rails中,是否存在可接受的格式来处理特定于环境的凭据?
我通读了DHH original PR和linked PR上的注释线程,其中说它实现了特定于环境的凭据,但是文档没有提及此实现,所以我不确定是否这是标准,还是很快就要消失了。