2012-03-29 23 views
1

Ich laufe Ruby 1.9.3 auf einer Linux-Box. Ich möchte SOCKSSocket verwenden, aber ich weiterhin in den folgenden Fehler auszuführen:nicht initialisierte Konstante SOCKSSocket

nicht initialisierte Konstante SOCKSSocket

einfachen Test mit 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>' 

hier ist der Quellcode direkt von resolv-Ersatz .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 

Ich kann nicht helfen, aber denke, dass ich eine Abhängigkeit installieren muss, um Socken oder etwas zu aktivieren. Alles wäre hilfreich.

Antwort

0

SOCKSocket scheint eine optionale Komponente von Ruby zu sein. Deshalb resolv-ersetzen nur Affen-Patches die Klasse, wenn es bereits existiert.

Als Illustration ‚net/ftp‘ definiert die folgende Methode:

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 

Vielleicht könnten Sie etwas Ähnliches tun (dh einen SOCKS-Socket erstellen, wenn Sie haben SOCKS aktiviert, sonst eine langweilige alte TCP erstellen Steckdose).

Und wenn Sie wirklich das Proxy-Verhalten benötigen, ergab eine schnelle Google-Suche den folgenden Edelstein: http://socksify.rubyforge.org/ die könnte nützlich sein.

0

Ok, so scheint es, das configure-Skript nicht --enable-Socken hat als Teil seiner Liste der gültigen Optionen, und das ist der Grund für die Warnung: nicht erkannte Optionen ...

ich nicht nach unten habe verfolgen wie man --enable-socks zu der Liste der gültigen Optionen hinzufügt, habe ich das Skript jedoch angehängt.

Edit: konfigurieren

den Abschnitt finden: einige Vars Initialisieren ... und enable_option_checking hinzufügen = keine

# Initialize some variables set by options. 
enable_option_checking=no 

Nun laufen:

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

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

dann, probieren Sie es aus in 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> 

Ich habe noch nichts mit SOCKSSocket gemacht, aber zumindest jetzt sieht es so aus, als ob ich es meinem Code zugänglich machen könnte. Außerdem nehme ich an, dass es einige ENV var gibt, um die Optionsprüfung zu deaktivieren oder einen besseren Weg zu finden. Ich habe das einfach nicht bemerkt.

Danke für Ihre Hilfe !!

Verwandte Themen