Chef Workstation执行knife ssl check时出现URI类变量未初始化错误
解决Chef Workstation中
knife ssl check的URI类变量未初始化错误 错误现象
执行knife ssl check时反复抛出以下错误:
[root@ip-172-31-37-35 .chef]# knife ssl check /opt/chef-workstation/embedded/lib/ruby/gems/3.1.0/gems/proxifier-1.0.3/lib/uri/socks.rb:8:in `<module:URI>': uninitialized class variable @@schemes in URI (NameError) from /opt/chef-workstation/embedded/lib/ruby/gems/3.1.0/gems/proxifier-1.0.3/lib/uri/socks.rb:3:in `<top (required)>' from <internal:/opt/chef-workstation/embedded/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require' from <internal:/opt/chef-workstation/embedded/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require' from /opt/chef-workstation/embedded/lib/ruby/gems/3.1.0/gems/proxifier-1.0.3/lib/proxifier.rb:2:in `<top (required)>' from <internal:/opt/chef-workstation/embedded/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require' from <internal:/opt/chef-workstation/embedded/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require' from /opt/chef-workstation/embedded/lib/ruby/gems/3.1.0/gems/chef-18.0.185/lib/chef/mixin/proxified_socket.rb:18:in `<top (required)>' from <internal:/opt/chef-workstation/embedded/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require' from <internal:/opt/chef-workstation/embedded/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require' from /opt/chef-workstation/embedded/lib/ruby/gems/3.1.0/gems/knife-18.0.185/lib/chef/knife/ssl_check.rb:33:in `block in <class:SslCheck>' from /opt/chef-workstation/embedded/lib/ruby/gems/3.1.0/gems/knife-18.0.185/lib/chef/knife.rb:245:in `each' from /opt/chef-workstation/embedded/lib/ruby/gems/3.1.0/gems/knife-18.0.185/lib/chef/knife.rb:245:in `load_deps' from /opt/chef-workstation/embedded/lib/ruby/gems/3.1.0/gems/knife-18.0.185/lib/chef/knife.rb:230:in `run' from /opt/chef-workstation/embedded/lib/ruby/gems/3.1.0/gems/knife-18.0.185/lib/chef/application/knife.rb:165:in `run' from /opt/chef-workstation/embedded/lib/ruby/gems/3.1.0/gems/knife-18.0.185/bin/knife:24:in `<top (required)>' from /bin/knife:400:in `load' from /bin/knife:400:in `<main>'
问题原因
这个错误是proxifier 1.0.3版本与Ruby 3.1+不兼容导致的。Ruby 3.1对标准库的URI模块做了内部结构调整,移除了@@schemes类变量,但proxifier 1.0.3的socks.rb文件仍在尝试引用该变量。
解决步骤
方案1:升级proxifier到兼容版本(推荐)
Chef Workstation使用嵌入式Ruby环境,直接用它的gem命令升级:
/opt/chef-workstation/embedded/bin/gem install proxifier -v 1.0.4
1.0.4版本已修复Ruby 3.1的兼容性问题。
方案2:手动修改proxifier代码(仅当升级不可行时使用)
编辑proxifier的socks.rb文件:
vi /opt/chef-workstation/embedded/lib/ruby/gems/3.1.0/gems/proxifier-1.0.3/lib/uri/socks.rb
找到第8行附近的代码,将原来引用@@schemes的语句替换为Ruby 3.1支持的API:
# 替换旧代码(类似如下内容) URI.scheme_list[:socks] = SOCKS # 替换为 URI.register_scheme('SOCKS', URI::SOCKS) URI.register_scheme('SOCKS5', URI::SOCKS)
保存文件后,重新运行knife ssl check验证。
验证修复
执行knife ssl check,如果错误不再出现,说明修复成功。
内容的提问来源于stack exchange,提问作者Awais Mughal
相关产品推荐
相关产品推荐

