2017-10-15 59 views
0

我有簡單的後臺作業,使用resque-pool運行,它使得某些socksproxy調用。這時候我開始Rails開發模式resque池,只要我改變生產模式,工作正常,我打連接超時與後臺作業SOCKSProxy在resque Rails生產模式下調用的連接超時

  • Rails的控制檯在生產中執行相同的代碼工作模式
  • 從命令行調用
  • 獨立Ruby腳本

調用是這樣的:

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 

調查:

當這個調用發生

net/http.rb

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

我發現,在生產模式下的工人子進程,而不是裝載從socksify-1.7.0/lib/socksify.rb TCPSocket類是仍然紅寶石加載提供resolv-replace.rb。不知道爲什麼。

錯誤我看到:

連接超時 - (2)連接於 「」 端口6455: /usr/lib/ruby/gems/2.1.0/gems/socksify-1.7.0/ lib/socksify.rb:178: initialize' /usr/lib/ruby/gems/2.1.0/gems/socksify-1.7.0/lib/socksify.rb:178:in 初始化'/usr/lib/ruby/2.1.0/resolv-replace.rb:23:in initialize' /usr/lib/ruby/2.1.0/net/http.rb:879:in打開' /usr/lib/ruby/2.1.0/net/ http.rb:879:在block in connect' /usr/lib/ruby/2.1.0/timeout.rb:76:in超時' /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:在start' /usr/lib/ruby/2.1.0/net/http.rb:583:in開始' /usr/lib/ruby/gems/2.1.0/ge ms/retries-0.0.5/lib/retries.rb:46: 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:在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 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 塊'

/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級)在執行' /usr/lib/ruby/gems/2.1.0/gems/resque-1.26。 0/lib/resque/job.rb:172:在 call' /usr/lib/ruby/gems/2.1.0/gems/resque-1.26.0/lib/resque/job.rb:172:in 塊(3級)執行'../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 塊(2級)執行' /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 執行' /usr/lib/ruby/gems/2.1.0/gems/ resque-1.26.0/lib/resque/worker.rb:290: perform' /usr/lib/ruby/gems/2.1.0/gems/resque-1.26.0/lib/resque/worker.rb:229:in 工作中的塊' /usr/lib/ruby/gems/2.1.0/gems/resque-1.26.0/lib/resque/worker .rb:206: loop' /usr/lib/ruby/gems/2.1.0/gems/resque-1.26.0/lib/resque/worker.rb:206:in 工作' /usr/lib/ruby/gems/2.1.0/gems/resque-pool-0.6.0/lib/resque/pool。RB:396:在 block in spawn_worker!' /usr/lib/ruby/gems/2.1.0/gems/resque-pool-0.6.0/lib/resque/pool.rb:389:in 叉 ' /usr/lib/ruby/gems/2.1.0/gems/resque-pool-0.6.0/lib/resque/pool.rb:389:in在spawn_missing_workers_for spawn_worker!' /usr/lib/ruby/gems/2.1.0/gems/resque-pool-0.6.0/lib/resque/pool.rb:367:in 塊' /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: block in maintain_worker_count' /usr/lib/ruby/gems/2.1.0/gems/resque-pool-0.6.0/lib/resque/pool.rb:350:in 每個' /usr/lib/ruby/gems/2.1.0/gems/resque-pool-0.6。 0/lib/resque/pool.rb:350:in 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 :在 ' /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 塊中的0塊(2級)' /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 執行' /usr/lib/ruby/gems/2.1.0/gems/空氣制動-5.5.0/LIB /空氣制動/耙/ task_ext.rb:19:在invoke_with_call_chain' execute' /usr/lib/ruby/gems/2.1.0/gems/rake-11.2.2/lib/rake/task.rb:187:in 塊/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

回答

0

經過更多的調查後,它變成了由於newrelic寶石啓用我n生產模式。 newrelic要求resolv-replace這沒有順利socksify寶石和resque後臺工作。因爲我不再需要新的遺物,只需禁用它,我就能克服這個問題。

相關問題