You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 09:37:07