2009-12-02 5 views
0

Je suis en train de mettre en œuvre l'application Rails alumni avec le support de l'API Facebook. Une des exigences est de poster un message de l'application directement sur le mur facebook. Tout semble fonctionner correctement, mais il y a un problème que je ne peux pas résoudre. Quand je travaille à l'université, j'ai une erreur "Aucune connexion n'a pu être établie car la machine cible l'a activement refusée". C'est parce que je suis derrière le proxy de l'université. J'ai fait quelques recherches sur google et j'ai essayé quelques changements dans le code et j'ai toujours le même message.Rails applicaiton behing proxy

La seule façon que je peux faire ce travail est très hacky. Si je change la signature de la méthode en classe http.rb de

 
def HTTP.new(address, port = nil, p_addr = nil, p_port = nil, p_user = nil, p_pass = nil) 
     h = Proxy(p_addr, p_port, p_user, p_pass).newobj(address, port) 
     h.instance_eval { 
     @newimpl = ::Net::HTTP.version_1_2? 
     } 
     h 
    end 

à

 
def HTTP.new(address, port = nil, p_addr = nil, p_port = nil, p_user = nil, p_pass = nil) 
     h = Proxy("proxy.uni.ac.uk", 8080, p_user, p_pass).newobj(address, port) 
     h.instance_eval { 
     @newimpl = ::Net::HTTP.version_1_2? 
     } 
     h 
    end 

La trace de la pile je suis arrivé, lorsque vous utilisez par défaut http.rb est

 
c:/ruby/lib/ruby/1.8/net/http.rb:565:in `initialize' 
c:/ruby/lib/ruby/1.8/net/http.rb:565:in `open' 
c:/ruby/lib/ruby/1.8/net/http.rb:565:in `connect' 
c:/ruby/lib/ruby/1.8/timeout.rb:48:in `timeout' 
c:/ruby/lib/ruby/1.8/timeout.rb:76:in `timeout' 
c:/ruby/lib/ruby/1.8/net/http.rb:565:in `connect' 
c:/ruby/lib/ruby/1.8/net/http.rb:558:in `do_start' 
c:/ruby/lib/ruby/1.8/net/http.rb:547:in `start' 
c:/ruby/lib/ruby/1.8/net/http.rb:404:in `post_form' 
c:/ruby/lib/ruby/gems/1.8/gems/facebooker-1.0.54/lib/facebooker/service/net_http_service.rb:4:in `post_form' 
c:/ruby/lib/ruby/gems/1.8/gems/facebooker-1.0.54/lib/facebooker/service.rb:78:in `post_form' 
c:/ruby/lib/ruby/gems/1.8/gems/facebooker-1.0.54/lib/facebooker/service.rb:66:in `post' 
c:/ruby/lib/ruby/gems/1.8/gems/facebooker-1.0.54/lib/facebooker/session.rb:610:in `post_without_logging' 
c:/ruby/lib/ruby/gems/1.8/gems/facebooker-1.0.54/lib/facebooker/session.rb:621:in `post' 
c:/ruby/lib/ruby/gems/1.8/gems/facebooker-1.0.54/lib/facebooker/logging.rb:20:in `log_fb_api' 
c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.4/lib/active_support/core_ext/benchmark.rb:10:in `realtime' 
c:/ruby/lib/ruby/gems/1.8/gems/facebooker-1.0.54/lib/facebooker/logging.rb:20:in `log_fb_api' 
c:/ruby/lib/ruby/gems/1.8/gems/facebooker-1.0.54/lib/facebooker/session.rb:620:in `post' 

Quelqu'un peut-il S'il vous plaît, aidez, comment je peux faire ce travail. Toute aide serait appréciée.

Répondre

1

Utiliser Net :: HTTP :: Proxy au lieu de Net :: HTTP si votre serveur d'applications d'anciens élèves est en cours d'exécution dans le pare-feu de l'université

Par exemple

Net::HTTP::Proxy("proxy.uni.ac.uk",8080).start('www.ruby-lang.org', 80) do |http| 
    print(http.get('/en/LICENSE.txt').body) 
end 

au lieu de

Net::HTTP.start('www.ruby-lang.org',80) do |http| 
    print(http.get('/en/LICENSE.txt').body) 
end 

Référence: http://www.ensta.fr/~diam/ruby/online/ruby-doc-stdlib/libdoc/net/http/rdoc/classes/Net/HTTP.html> Accès via un proxy