2017-10-15 19 views
0

J'ai un simple travail d'arrière-plan qui s'exécute en utilisant resque-pool qui effectue certains appels socksproxy. Cela fonctionne très bien quand je commence la resque piscine en mode développement Rails dès que je change le mode de production i frappé délai de connexion avec travail de fondDélai de connexion pour SOCKSProxy Appels en mode de production resque Rails

Le même code fonctionne lorsqu'il est exécuté dans

  • Rails Console en production Mode
  • de script Ruby autonome appelé à partir de la ligne de commande

appels sont quelque chose comme:

req = Net::HTTP::Get.new(uri.request_uri) 
response = Net::HTTP.SOCKSProxy(@socks_server, @socks_port).start(uri.host, uri.port) do |http| 
    http.request(req) 
end 

Investigation:

lorsque cet appel se produit dans net/http.rb

TCPSocket.open(conn_address, conn_port, @local_host, @local_port) 

j'ai trouvé que dans le processus de l'enfant en mode de production des travailleurs au lieu de chargement TCPSocket classe de socksify-1.7.0/lib/socksify.rb il se charge encore de rubis fourni resolv-replace.rb. Je ne sais pas pourquoi.

erreur que je vois:

Délai de connexion dépassé - connect (2) pour le port "" 6455: /usr/lib/ruby/gems/2.1.0/gems/socksify-1.7.0/ lib/socksify.rb: 178: dans initialize' /usr/lib/ruby/gems/2.1.0/gems/socksify-1.7.0/lib/socksify.rb:178:in initialiser '/usr/lib/ruby/2.1.0/resolv-replace.rb:23:in initialize' /usr/lib/ruby/2.1.0/net/http.rb:879:in ouvrir' /usr/lib/ruby/2.1.0/net/ http.rb: 879: dans block in connect' /usr/lib/ruby/2.1.0/timeout.rb:76:in timeout ' /usr/lib/ruby/2.1.0/net/http.rb:878:in connect' /usr/lib/ruby/2.1.0/net/http.rb:863:in do_start' /usr/lib/ruby/2.1.0/net/http. rb: 852: dans start' /usr/lib/ruby/2.1.0/net/http.rb:583:in start ' /usr/lib/ruby/gems/2.1.0/ge ms/retries-0.0.5/lib/retries.rb: 46: dans call' /usr/lib/ruby/gems/2.1.0/gems/retries-0.0.5/lib/retries.rb:46:in with_retries ' /usr/lib/ruby/gems/2.1.0/gems/resque-1.26.0/lib/resque/job.rb : 177: dans block (3 levels) in perform' /usr/lib/ruby/gems/2.1.0/gems/newrelic_rpm-3.16.2.321/lib/new_relic/agent/instrumentation/resque.rb:41:in bloc dans around_perform_with_monitoring » /usr/lib/ruby/gems/2.1.0/gems/newrelic_rpm-3.16.2.321/lib/new_relic/agent/instrumentation/controller_instrumentation.rb:363:in ` perform_action_with_newrelic_trace "

bloc /usr/lib/ruby/gems/2.1.0/gems/newrelic_rpm-3.16.2.321/lib/new_relic/agent/instrumentation/resque.rb:33:in around_perform_with_monitoring' /usr/lib/ruby/gems/2.1.0/gems/resque-1.26.0/lib/resque/job.rb:176:in (2 niveaux) en exécution ' /usr/lib/ruby/gems/2.1.0/gems/resque-1.26. 0/lib/resque/job.rb: 172: dans call' /usr/lib/ruby/gems/2.1.0/gems/resque-1.26.0/lib/resque/job.rb:172:in bloc (3 niveaux) dans effectuer '../app/jobs/resque_hooks.rb:15:in around_perform_job_duration' /usr/lib/ruby/gems/2.1.0/gems/resque-1.26.0/lib/resque/job.rb:172:in bloc (2 niveaux) dans effectuer' /usr /lib/ruby/gems/2.1.0/gems/resque-1.26.0/lib/resque/job.rb:184:in call' /usr/lib/ruby/gems/2.1.0/gems/resque-1.26.0/lib/resque/job.rb:184:in effectuer ' /usr/lib/ruby/gems/2.1.0/gems/ resque-1.26.0/lib/resque/worker.rb: 290: dans perform' /usr/lib/ruby/gems/2.1.0/gems/resque-1.26.0/lib/resque/worker.rb:229:in bloc dans le travail ' /usr/lib/ruby/gems/2.1.0/gems/resque-1.26.0/lib/resque/worker .rb: 206: dans loop' /usr/lib/ruby/gems/2.1.0/gems/resque-1.26.0/lib/resque/worker.rb:206:in travail ' /usr/lib/ruby/gems/2.1.0/gems/resque-pool-0.6.0/lib/resque/pool.rb: 396: dans block in spawn_worker!' /usr/lib/ruby/gems/2.1.0/gems/resque-pool-0.6.0/lib/resque/pool.rb:389:in fourche ' /usr/lib/ruby/gems/2.1.0/gems/resque-pool-0.6.0/lib/resque/pool.rb:389:in spawn_worker!' /usr/lib/ruby/gems/2.1.0/gems/resque-pool-0.6.0/lib/resque/pool.rb:367:in bloc dans spawn_missing_workers_for' /usr/lib/ruby/gems/2.1.0/gems/resque-pool-0.6.0/lib/resque/pool.rb:366:in times' /usr/lib/ruby/gems/2.1.0/gems/resque-pool-0.6.0/lib/resque/pool.rb:366:in spawn_missing_workers_for ' /usr/lib/ruby/gems/2.1 .0/gems/resque-pool-0.6.0/lib/resque/pool.rb: 352: dans block in maintain_worker_count' /usr/lib/ruby/gems/2.1.0/gems/resque-pool-0.6.0/lib/resque/pool.rb:350:in chaque ' /usr/lib/ruby/gems/2.1.0/gems/resque-pool-0.6. 0/lib/resque/pool.rb: 350: dans maintain_worker_count' /usr/lib/ruby/gems/2.1.0/gems/resque-pool-0.6.0/lib/resque/pool.rb:263:in start ' /usr/lib/ruby/gems/2.1.0/gems/resque-pool-0.6.0/lib/resque/pool.rb:89 : en run' /usr/lib/ruby/gems/2.1.0/gems/resque-pool-0.6.0/lib/resque/pool/tasks.rb:17:in bloc (2 niveaux) dans ' /usr/lib/ruby/gems/2.1.0/gems/rake-11.2.2/lib/rake/task.rb:248:in call' /usr/lib/ruby/gems/2.1.0/gems/rake-11.2.2/lib/rake/task.rb:248:in bloquer dans l'exécution' /usr /lib/ruby/gems/2.1.0/gems/rake-11.2.2/lib/rake/task.rb:243:in each' /usr/lib/ruby/gems/2.1.0/gems/rake-11.2.2/lib/rake/task.rb:243:in exécutez ' /usr/lib/ruby/gems/2.1.0/gems/ aérofrein-5.5.0/lib/aérofreins/râteau/task_ext.rb: 19: en execute' /usr/lib/ruby/gems/2.1.0/gems/rake-11.2.2/lib/rake/task.rb:187:in bloc dans invoke_with_call_chain' /usr/lib/ruby/2.1.0/monitor.rb:211:in mon_synchronize' /usr/lib/ruby/gems/2.1.0/gems/rake-11.2.2/lib/rake/task.rb:180:in invoke_with_call_chain

Répondre

0

Après plus d'enquête, il se tourne en raison de newrelic gem activé i n mode de production. newrelic nécessite resolv-replace cela ne va pas bien avec socksify gem et resque travail d'arrière-plan. Comme je n'avais plus besoin d'une nouvelle relique, en la désactivant, j'étais capable de surmonter ce problème.