如何在AWS中重新生成Ruby on Rails项目的secret_key_base?
结论
完全可以重新生成secret_key_base,旧密钥遗失不会影响你在新AWS账号下的项目部署。secret_key_base是Rails框架用来签名Cookie、加密会话、加密敏感业务数据的核心密钥,全新部署环境不需要依赖旧密钥值。
具体操作步骤
- 生成新密钥:进入项目根目录,在终端执行命令
命令执行后会输出一个符合Rails安全长度要求的随机字符串,就是你需要的新rails secretsecret_key_base值。 - 根据项目的配置方式,把新密钥配置到你的新AWS部署环境中,常见配置场景如下:
- 如果你使用Rails 5.2+ 自带的credentials加密配置管理:执行
EDITOR="你常用的编辑器路径(比如vim、nano、code)" bin/rails credentials:edit,在打开的配置文件中更新secret_key_base字段为新生成的值,保存后Rails会自动加密存储配置,部署时只要把对应的master key配置到AWS环境的变量中即可。 - 如果你通过环境变量读取密钥(AWS EC2、ECS、Elastic Beanstalk等大部分部署场景都用这种方式):直接在新AWS账号对应服务的环境变量配置页,新增
SECRET_KEY_BASE配置项,值填入刚生成的新密钥即可,禁止把密钥明文硬编码提交到代码仓库。 - 如果你使用Rails 5.1及更早版本,通过
config/secrets.yml管理密钥:打开对应配置文件,把production环境下的secret_key_base值替换为新生成的密钥,建议配合环境变量读取,不要明文写在文件里提交。
- 如果你使用Rails 5.2+ 自带的credentials加密配置管理:执行
注意:如果是在原有生产环境直接替换
secret_key_base,会导致旧环境下所有已登录会话、签名Cookie、用Rails加密机制存储的字段数据全部失效,用户需要重新登录。但你是使用独立新AWS账号做全新部署,没有继承旧环境的运行时数据,所以不会有这个影响。
内容的提问来源于stack exchange,提问作者jeff
相关产品推荐
相关产品推荐

