2013-01-23 2 views
-1
uniqUsers = User.find(params[:userid]).events.where("comingfrom != ''").uniq_by {|obj| obj.comingfrom} 

    uniqUsers.map do |elem| 
    begin 
     @tag = nil 
     open('http://localhost:3000/search_dbs/show?userid='+ params[:userid] + '&fromnumber=' + elem.comingfrom + '&format=json', 'r', :read_timeout=>1) do |http| 
     @tag = http.read 
     end 
    rescue Exception => e 
     puts "failes" 
     puts e 
    end 
end 

Bonjour, cela me rend fou, pour une raison quelconque, la commande open url est à court de temps sans erreur. quand j'essaye la même URL dans le chrome tout fonctionne comme un charme, quand Im faisant ceci du code je reçois Timeout :: Erreurl'URL ouverte est Timeout :: Error

+0

L'exécutez-vous sur la même machine que Chrome? Avez-vous un pare-feu au niveau de l'application qui empêche Ruby d'établir des connexions? – tadman

+0

Avez-vous essayé d'augmenter 'read_timeout'? Vous l'avez réglé à une seconde (': read_timeout => 1'), ce qui peut ne pas suffire. Essayez de le définir sur quelque chose de beaucoup plus élevé. –

+0

Une seconde est extrêmement faible. Certains sites ne peuvent pas agir ensemble en cinq secondes. –

Répondre

0

Une seconde est optimiste. Lorsque j'écrivais des araignées, je créais une file d'attente de nouvelles tentatives, contenant des sous-tableaux ou des objets contenant le nombre de tentatives précédentes, l'URL et peut-être la dernière valeur de délai d'expiration. En utilisant une valeur de délai d'attente incrémentielle, la première fois que j'essaie une seconde, la seconde essaie deux secondes, quatre, huit, seize, etc. jusqu'à ce que je détermine que le site n'allait pas répondre.

Questions connexes