未初始化的常量SOCKSSocket

时间:2012-03-29 10:38:38

标签: ruby ruby-1.9.3

我在linux机器上运行ruby 1.9.3。我想使用SOCKSSocket,但是,我继续遇到以下错误:

未初始化的常量SOCKSSocket

使用IRB进行简单测试

irb(main):001:0> require 'resolv-replace'
=> true
irb(main):002:0> SOCKSSocket
NameError: uninitialized constant SOCKSSocket
    from (irb):2
    from /usr/local/bin/irb:12:in `<main>'

这是源代码,直接来自resolv-replace.rb

class SOCKSSocket < TCPSocket
  # :stopdoc:
  alias original_resolv_initialize initialize
  # :startdoc:
  def initialize(host, serv)
    original_resolv_initialize(IPSocket.getaddress(host), port)
  end
end if defined? SOCKSSocket

我不禁想到我需要安装一些启用socks或其他东西所需的依赖项。任何事情都会有所帮助。

2 个答案:

答案 0 :(得分:0)

SOCKSSocket似乎是ruby的可选组件。这就是为什么 resolv-只替换猴子 - 如果它已经存在,则修补该类。

举例来说,'net / ftp'​​定义了以下方法:

def open_socket(host, port)
  if defined? SOCKSSocket and ENV["SOCKS_SERVER"]
    @passive = true
    return SOCKSSocket.open(host, port)
  else
    return TCPSocket.open(host, port)
  end
end

也许你可以做类似的事情(即创建一个SOCKS套接字,如果 你启用了SOCKS,否则创建一个无聊的旧TCP套接字。)

如果您确实需要代理行为,请快速进行谷歌搜索 揭示了以下宝石:http://socksify.rubyforge.org/ 可能有用。

答案 1 :(得分:0)

好的,配置脚本似乎没有--enable-socks作为其有效选项列表的一部分,这就是警告的原因:无法识别的选项......

我没有追踪如何将--enable-socks添加到有效选项列表中,但是,我确实修改了脚本。

编辑:配置

找到该部分:初始化一些变量...并添加enable_option_checking = no

# Initialize some variables set by options.
enable_option_checking=no

现在,运行:

./configure --prefix=/usr/local --enable-socks
make
sudo make install

>ruby --version => 1.9.3p125 (2012-02-16 revision 34643) [x86_64-linux]

然后,在irb

中试试
irb(main):001:0> require 'socket'
=> true
irb(main):002:0> require 'resolv-replace'
=> true
irb(main):003:0> SOCKSSocket
=> SOCKSSocket
irb(main):004:0>

我还没有使用SOCKSSocket做任何事情,但是,至少现在它看起来我的代码可以访问它。此外,我假设有一些ENV var禁用选项检查或更好的方法。我只是没跟踪那个。

感谢您的帮助!!