我在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或其他东西所需的依赖项。任何事情都会有所帮助。
答案 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禁用选项检查或更好的方法。我只是没跟踪那个。
感谢您的帮助!!