SOCKSProxy在resque Rails生产模式下调用的连接超时
我有简单的后台作业,使用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:ininitialize' /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:inconnect' /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_traceblock (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:inaround_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:incall' /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_forspawn_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:intimes' /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:inmaintain_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:incall' /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:ineach' /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:inmon_synchronize' /usr/lib/ruby/gems/2.1.0/gems/rake-11.2.2/lib/rake/task.rb:180:in
invoke_with_call_chain
经过更多的调查后,它变成了由于newrelic宝石启用我n生产模式。 newrelic要求resolv-replace
这没有顺利socksify宝石和resque后台工作。因为我不再需要新的遗物,只需禁用它,我就能克服这个问题。