Rails 6创建项目报couldn't set additional authenticated data错误
错误原因
- 你执行
rails new时调用的不是rbenv安装的Ruby 2.7.2,而是macOS系统自带的Ruby 2.6。看错误堆栈里的路径/Library/Ruby/Gems/2.6.0、/System/Library/Frameworks/Ruby.framework/Versions/2.6/就能确认,路径里的版本号、gem存放位置全是系统Ruby的,和你配置的2.7.2完全不沾边。 - macOS自带的系统Ruby是苹果定制编译的,绑定的OpenSSL版本有兼容缺陷,不支持Rails 6.0.5生成加密凭证文件时需要的附加认证数据设置逻辑,直接触发
OpenSSL::Cipher::CipherError报错。 - 根因是rbenv的初始化脚本没加到shell配置里,终端查找命令的时候优先命中了系统路径下的rails程序,根本没走rbenv的版本管理逻辑。
修复步骤
- 先验证当前Ruby环境是否正确,执行以下命令:
which ruby ruby -v
如果输出路径不是以.rbenv/shims/ruby结尾,版本号也不是2.7.2,就确认是rbenv加载失败的问题。
2. 把rbenv初始化配置写入shell配置文件,macOS 12默认用zsh,执行以下命令:
echo 'eval "$(rbenv init - zsh)"' >> ~/.zshrc source ~/.zshrc
如果你手动切到了bash,就把上面命令里的zsh换成bash,配置文件路径换成~/.bash_profile再执行。
3. 重新检查which ruby和ruby -v的输出,确认已经切换到rbenv管理的Ruby 2.7.2。
4. 清理之前误装到系统Ruby里的Rails,避免后续路径冲突:
sudo gem uninstall rails -v 6.0.5 sudo gem uninstall railties -v 6.0.5
- 在rbenv的Ruby 2.7.2环境下重新安装对应版本的Rails:
gem install rails -v 6.0.5 rbenv rehash
- 执行
which rails确认路径在rbenv的shims目录下,之后再跑rails new myapp -d postgresql就能正常创建项目了。
避坑提示:给rbenv管理的Ruby装gem的时候不要加
sudo,sudo会直接绕过rbenv的环境隔离,把gem装到系统Ruby目录里,很容易搞出版本冲突。
内容的提问来源于stack exchange,提问作者gul Ranaa
相关产品推荐
相关产品推荐

