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

Rails 7.0.6通过Capistrano部署时遇Missing `secret_key_base`错误求助

Rails 7.0.6 + Ruby 3.2.2 部署时缺失secret_key_base的解决方案

问题描述

使用Rails 7.0.6和Ruby 3.2.2,通过Capistrano执行cap production deploy部署到远程服务器时,触发如下错误:

rake stdout: Nothing written
rake stderr: rake aborted!
ArgumentError: Missing secret_key_base for 'production' environment, set this string with bin/rails credentials:edit

参考Ubuntu 20.04的Rails部署教程,已尝试以下无效方案:

  • 在服务器应用目录添加.rbenv-vars文件:
DATABASE_URL = postgresql://username:pass@127.0.0.1/myapp_production
SECRET_KEY_BASE = secret key here by typing in local machine "bundle exec rails secret"
  • 执行nano bin/rails credentials:edit,修改了bin目录下的rails脚本文件,添加secret_key_base = secret_key_here ******,问题未解决。

可行解决方案

方案一:使用Rails官方Credentials加密机制

你之前错误编辑了bin/rails脚本,正确的credentials配置需要操作加密的config/credentials.yml.enc文件:

  1. 本地生成并配置生产环境密钥
    在本地项目根目录执行:
bundle exec rails credentials:edit

首次执行会自动生成config/credentials.yml.enc(加密配置文件)和config/master.key(解密密钥)。在打开的YAML编辑界面中添加:

production:
  secret_key_base: 此处填入本地执行`bundle exec rails secret`生成的密钥

保存退出后,Rails会自动加密配置文件。

  1. 部署解密密钥到服务器
    master.key是解密配置的核心,选择以下一种方式部署:
  • 方式A:将本地的config/master.key上传到服务器应用目录的config文件夹(注意:该文件默认在.gitignore中,禁止提交到Git)
  • 方式B:在服务器上设置环境变量RAILS_MASTER_KEY,值为本地master.key的内容
  1. 配置Capistrano同步加密配置文件
    在config/deploy.rb中添加:
append :linked_files, "config/credentials.yml.enc"

确保Capistrano将加密配置文件部署到服务器。

方案二:直接设置服务器环境变量

若不想使用加密机制,可直接在服务器全局环境变量中配置:

  1. 登录服务器,编辑shell配置文件(如~/.bashrc、~/.zshrc或/etc/profile)
  2. 添加环境变量:
export SECRET_KEY_BASE="填入本地`bundle exec rails secret`生成的密钥"
  1. 重新加载配置文件:
source ~/.bashrc # 对应你使用的shell配置文件
  1. 配置Capistrano传递环境变量(可选)
    在config/deploy.rb中添加:
set :default_env, { 'SECRET_KEY_BASE' => ENV['SECRET_KEY_BASE'] }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 13:26:22