执行cap production deploy命令报错,求助解决master.key缺失问题
解决Capistrano部署Rails 7时的database.yml和master.key缺失问题
1. 处理master.key缺失问题
Rails 7默认用credentials.yml.enc加密敏感配置,master.key是解密密钥。开发环境找不到该文件,通常是这两种情况:
- 项目从版本库克隆而来,原作者未提交
master.key(这是合规操作,绝对不能把密钥提交到Git) - 本地开发时通过环境变量
RAILS_MASTER_KEY注入了解密密钥,而非依赖本地文件
解决步骤:
- 先检查本地是否存在隐藏的
config/master.key文件(开启文件管理器显示隐藏文件) - 如果确实没有,在本地开发环境执行
rails credentials:edit,系统会自动生成新的master.key和credentials.yml.enc - 将新生成的
master.key上传到生产服务器的/home/deploy/mynewapp/shared/config/目录
2. 处理database.yml配置
不要直接复制开发环境的database.yml到生产环境,两者数据库配置(库名、用户名、密码、主机)通常差异极大:
- 在生产服务器的
/home/deploy/mynewapp/shared/config/目录下新建database.yml,填写生产环境专属配置,示例:production: adapter: postgresql # 或mysql2等你使用的数据库适配器 database: mynewapp_production username: 生产数据库用户名 password: 生产数据库密码 host: localhost pool: 5 encoding: utf8 - 执行
chown deploy:deploy /home/deploy/mynewapp/shared/config/database.yml,确保文件权限匹配部署用户
3. 优化Capistrano部署配置
在项目的config/deploy.rb中添加以下代码,让Capistrano自动将共享目录的配置文件链接到当前部署版本:
append :linked_files, "config/database.yml", "config/master.key"
后续部署时,系统会自动关联shared/config下的文件,无需每次手动复制
内容的提问来源于stack exchange,提问作者js7
相关产品推荐
相关产品推荐

