неинициализированная константа SOCKSSocket - PullRequest
1 голос
/ 29 марта 2012

Я использую ruby ​​1.9.3 на Linux-коробке. Я хотел бы использовать 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

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

Ответы [ 2 ]

0 голосов
/ 30 марта 2012

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

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

Редактировать: настроить

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

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

0 голосов
/ 30 марта 2012

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

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

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

...