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

ROR7部署VPS(Nginx+Passenger)遇secret_key_base缺失错误

解决Rails 7部署时secret_key_base缺失的问题

问题根源

你当前的credentials配置让production环境从环境变量SECRET_KEY_BASE读取密钥,但VPS的production环境既没设置这个变量,Passenger/Nginx也没加载到它,导致Rails找不到密钥。另外,你同时在根级和production节点配置了secret_key_base,Rails会优先使用环境节点下的配置,进一步加剧了变量缺失的问题。

两种解决方法,任选其一即可:

方法1:直接在credentials中写入production密钥

  • 重新编辑production环境的凭据文件:
    RAILS_ENV=production EDITOR=nano rails credentials:edit
    
  • 删除production:节点(或直接在该节点下写入实际密钥字符串,放弃环境变量方式),修改后的内容示例:
    # Used as the base secret for all MessageVerifiers in Rails, including the one protecting cookies.
    secret_key_base: 你的实际密钥字符串
    
  • 保存退出后,Rails会自动加密该文件。部署时需将加密后的config/credentials/production.yml.enc和对应的config/credentials/production.key一同上传到VPS(注意production.key需保密,禁止提交到版本库)。

方法2:在VPS上配置Passenger可读取的环境变量

  • 若坚持使用环境变量方式,需确保Passenger能获取到SECRET_KEY_BASE:
    1. 本地生成一个合法密钥:
      rails secret
      
    2. 打开Nginx站点配置文件(如/etc/nginx/sites-available/你的站点.conf),在server块内添加:
      passenger_env_var SECRET_KEY_BASE "你刚生成的密钥字符串";
      
    3. 重启Nginx和Passenger使配置生效:
      sudo systemctl restart nginx
      sudo passenger-config restart-app /你的应用部署路径
      

额外注意事项

  • 切勿将*.key类型文件提交至Git仓库,这类文件是解密凭据的核心密钥,必须严格保密。
  • 部署时要确保config/credentials/production.yml.enc和对应的production.key都存在于服务器的应用目录中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 14:22:10