Rails 5.2加密凭据无法保存,如何实现凭据持久化?
解决Rails Credentials修改无法持久化的问题
嘿,这个问题我之前帮同事踩过坑!核心原因大多是编辑器没有让Rails等到你真正保存退出就结束了进程,或者master.key出了问题。我给你整理了几个靠谱的解决步骤:
1. 确保编辑器是阻塞式启动的
Rails执行bin/rails credentials:edit时,会启动编辑器并等待它完全退出后才加密保存凭据。如果你的编辑器是后台启动的(比如VS Code的默认code命令),Rails会误以为你没做任何修改,直接用默认值重新生成临时文件。
解决方法:
- 如果你用VS Code,设置编辑器为等待模式:
要是想永久生效,把这行加到你的export EDITOR="code --wait"~/.bashrc、~/.zshrc或者对应的shell配置文件里,重启终端就生效了。 - 其他编辑器的对应命令:
- Sublime Text:
export EDITOR="subl --wait" - Vim/Neovim:默认就是阻塞式的,只要正常用
:wq保存退出就行,不用额外设置。
- Sublime Text:
2. 检查master.key文件的有效性
Rails依赖config/master.key来解密和加密凭据文件。如果这个文件丢失、内容错误,或者你不小心生成了新的master.key,Rails会创建全新的加密凭据文件,导致之前的修改全部丢失。
- 确认
config/master.key存在,并且内容和你初始化项目时生成的一致(新克隆的项目这个文件不会在Git里,得从项目维护者那里获取)。 - 如果确实需要重新生成master.key,执行
rails credentials:master_key,但注意:这会让之前的加密凭据无法解密,谨慎操作!
3. 手动验证临时文件的保存状态
有时候编辑器的临时文件写入可能出问题,你可以这样排查:
- 打开临时文件后,修改内容,先不要关闭编辑器,打开另一个终端窗口,查看临时文件的内容:
确认修改已经写入文件。cat /tmp/credentials.yml.enc.* - 然后回到编辑器,执行保存并完全退出操作(比如VS Code要关闭整个窗口,Vim用
:wq),这时候Rails才会正确加密保存你的修改。
4. 清理临时文件后重试
如果上面的方法都没用,试试清理Rails生成的临时凭据文件:
rm /tmp/credentials.yml.enc.*
然后重新执行bin/rails credentials:edit,修改内容后正常保存退出,应该就能持久化了。
内容的提问来源于stack exchange,提问作者The Whiz of Oz
相关产品推荐
相关产品推荐

