无法加载Ruby gkms插件:hiera/eyaml/encryptors/gkms加载错误求助
解决hiera-eyaml-gkms插件加载错误(LoadError: cannot load such file -- hiera/backend/eyaml/encryptors/gkms)
错误日志
/Library/Ruby/Site/2.6.0/rubygems/core_ext/kernel_require.rb:85:in `require': cannot load such file -- hiera/backend/eyaml/encryptors/gkms (LoadError) from /Library/Ruby/Site/2.6.0/rubygems/core_ext/kernel_require.rb:85:in `require' from /Users/user/.gem/ruby/2.6.0/gems/hiera-eyaml-3.4.0/lib/hiera/backend/eyaml/encryptor.rb:17:in `find' from /Users/user/.gem/ruby/2.6.0/gems/hiera-eyaml-3.4.0/lib/hiera/backend/eyaml/subcommands/encrypt.rb:79:in `execute' from /Users/user/.gem/ruby/2.6.0/gems/hiera-eyaml-3.4.0/lib/hiera/backend/eyaml/CLI.rb:46:in `execute' from /Users/user/.gem/ruby/2.6.0/gems/hiera-eyaml-3.4.0/bin/eyaml:21:in `<top (required)>' from /Users/user/.gem/ruby/2.6.0/bin/eyaml:25:in `load' from /Users/user/.gem/ruby/2.6.0/bin/eyaml:25:in `<main>'
当前环境信息
- eyaml版本:
❯ eyaml version [hiera-eyaml-core] hiera-eyaml (core): 3.4.0
- Ruby版本:
❯ ruby -v ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [arm64-darwin22]
- 已安装的关键gem:
❯ gem list *** LOCAL GEMS *** ... google-cloud-kms (2.0.0) hiera-eyaml (3.4.0) hiera-eyaml-gkms (0.2.0) ...
- $PATH配置:
export PATH="/opt/homebrew/opt/ruby/bin:/opt/homebrew/lib/ruby/gems/3.1.0/bin:$PATH"
- $LOAD_PATH信息:
irb(main):001> puts $LOAD_PATH /opt/homebrew/lib/ruby/site_ruby/3.3.0 /opt/homebrew/lib/ruby/site_ruby/3.3.0/arm64-darwin22 /opt/homebrew/lib/ruby/site_ruby /opt/homebrew/lib/ruby/vendor_ruby/3.3.0 /opt/homebrew/lib/ruby/vendor_ruby/3.3.0/arm64-darwin22 /opt/homebrew/lib/ruby/vendor_ruby /opt/homebrew/Cellar/ruby/3.3.0/lib/ruby/3.3.0 /opt/homebrew/Cellar/ruby/3.3.0/lib/ruby/3.3.0/arm64-darwin22
已尝试的排查步骤
- 重装不同版本的hiera-eyaml、hiera-eyaml-gkms gem
- 更新gem库
- 重装Ruby(当前为brew安装的3.3.0)
- 更新$PATH环境变量
解决方案建议
从错误日志可以看出,当前执行的eyaml命令实际调用的是Ruby 2.6.0环境下的版本(路径/Users/user/.gem/ruby/2.6.0/bin/eyaml),但你当前使用的是Ruby 3.3.0,二者环境不匹配导致无法找到gkms加密器文件。以下是具体修复步骤:
1. 确认eyaml命令的实际路径
执行以下命令查看eyaml的位置:
which eyaml
如果输出指向Ruby 2.6.0的路径(如/Users/user/.gem/ruby/2.6.0/bin/eyaml),说明系统优先使用了旧版本的命令。
2. 清理旧版本gem并重新安装到正确环境
# 卸载所有版本的相关gem gem uninstall -a hiera-eyaml hiera-eyaml-gkms # 确认当前gem命令属于brew安装的Ruby 3.3.0 which gem # 预期输出:/opt/homebrew/opt/ruby/bin/gem # 重新安装gem gem install hiera-eyaml hiera-eyaml-gkms
3. 验证gkms加密器文件存在
执行以下命令查看hiera-eyaml-gkms的安装文件:
gem contents hiera-eyaml-gkms
确保输出中包含hiera/backend/eyaml/encryptors/gkms.rb文件,比如类似路径:
/opt/homebrew/lib/ruby/gems/3.3.0/gems/hiera-eyaml-gkms-0.2.0/lib/hiera/backend/eyaml/encryptors/gkms.rb
4. 修正$PATH配置
更新你的shell配置文件(如~/.zshrc或~/.bashrc),确保brew的Ruby路径优先级最高,且版本匹配当前Ruby 3.3.0:
export PATH="/opt/homebrew/opt/ruby/bin:/opt/homebrew/lib/ruby/gems/3.3.0/bin:$PATH"
执行以下命令刷新环境:
source ~/.zshrc # 或source ~/.bashrc,根据你的shell类型选择
5. 验证环境一致性
执行以下命令确认所有工具都指向Ruby 3.3.0环境:
ruby -v # 输出ruby 3.3.0... gem -v # 对应3.3.0的gem版本(通常为3.5.x) which eyaml # 输出/opt/homebrew/lib/ruby/gems/3.3.0/bin/eyaml eyaml version # 显示hiera-eyaml 3.4.0,且路径为brew相关目录
完成以上步骤后,重新尝试使用gkms插件加密文件,应该可以解决加载错误。
内容的提问来源于stack exchange,提问作者adrianno.86
相关产品推荐
相关产品推荐

