2012-03-29 3 views
1

Я бегу рубин 1.9.3 на коробке linux. Я хотел бы использовать SOCKSSocket, однако, я продолжаю работать в следующей ошибки:uninitialized constant 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>' 

здесь исходный код непосредственно из Резолв замены .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 

Я не могу не думать, что мне нужно установить некоторую зависимость, необходимую для включения носков или чего-то еще. Все будет полезно.

ответ

0

SOCKSSocket является необязательным компонентом рубина. Вот почему resolv-replace only monkey-patches класс, если он уже существует.

В качестве иллюстрации «сеть/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 разъем).

И если вам действительно нужно поведение прокси, быстрый поиск Google показал следующий перл: http://socksify.rubyforge.org/ который может быть полезным.

0

Хорошо, это, кажется, скрипт конфигурации не имеет --enable-носки, как часть это список допустимых вариантов, и что является причиной ПРЕДУПРЕЖДЕНИЕ: непризнанные варианты ...

Я не выследить как добавить --enable-socks в список допустимых параметров, однако, я установил скрипт.

Edit: не настроите

найти раздел: Инициализировать некоторые ВАР ... и добавить enable_option_checking = нет

# 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, чтобы отключить проверку опций или лучший способ ее устранения. Я просто не проследил это.

Спасибо за помощь!

Смежные вопросы