Rails 6.X生产环境下如何从环境变量读取secret_key_base?
解决Rails生产环境资产重编译时读取SECRET_KEY_BASE环境变量的问题
方法1:直接修改生产环境配置文件
在config/environments/production.rb中添加明确的配置,让Rails直接从环境变量读取secret_key_base:
Rails.application.configure do # 保留原有其他配置 config.secret_key_base = ENV["SECRET_KEY_BASE"] end
配置后,Rails在资产编译阶段会直接读取环境变量的值,完全不需要依赖加密的credentials文件。
方法2:确保部署工具在编译阶段注入环境变量
如果使用Capistrano、Docker这类部署工具,需要保证资产重编译的环节能获取到SECRET_KEY_BASE:
- 用Capistrano的话,在
deploy.rb中添加:set :default_env, { 'SECRET_KEY_BASE' => ENV['SECRET_KEY_BASE'] } - 用Docker的话,在
Dockerfile或docker-compose.yml中明确注入该环境变量,确保镜像编译阶段能读取到值。
本地验证方法
部署前可以先在本地模拟生产环境编译资产,验证配置是否生效:
RAILS_ENV=production SECRET_KEY_BASE=你的测试密钥 rails assets:precompile
如果能正常完成编译,说明配置没问题。
注意:部分部署工具会在隔离环境中执行资产编译,需要单独确认该环节的环境变量是否已正确注入,避免出现"变量存在但编译阶段读不到"的情况。
内容的提问来源于stack exchange,提问作者Pablo Fernandez
相关产品推荐
相关产品推荐

