Saturday 15 February 2014

ruby on rails - Weird interaction of delayed_job, daemons, koala, pg -



ruby on rails - Weird interaction of delayed_job, daemons, koala, pg -

i've been debugging weird rails problem appears occur when using 4 of these gems:

delayed_job daemons koala pg

basically, if seek create facebook graph api phone call via koala delayed job, postgres server connection gets destroyed , not reconnect.

by introducing logging statements on various gems (local copies), i've managed nail downwards happening within of phone call faraday.get (koala uses faraday http). more specifically, happens in build_response.

this happens if start delayed job via 'bin/delayed_job start' method results in phone call daemonize()

if start delayed_job worker via rake task 'rake jobs:work', problem not reproduce.

below illustration diagnostic output when running in daemon mode. sorry not have stack trace because delayed_job not provide 1 in error output:

%%% before koala.make_request, query db %%% sqlres [{"count"=>"5"}] %%% before faraday.new, query db %%% sqlres [{"count"=>"5"}] %%% after faraday.new, query db %%% sqlres [{"count"=>"5"}] %%% send #<faraday::connection:0x007fc8c9ab3580 @parallel_manager=nil, @headers={"user-agent"=>"faraday v0.9.0"}, @params={"access_token"=>redacted}, @options=#<faraday::requestoptions (empty)>, @ssl=#<faraday::ssloptions verify=true>, @default_parallel_manager=nil, @builder=#<faraday::rackbuilder:0x007fc8c9ab2fe0 @handlers=[koala::httpservice::multipartrequest, faraday::request::urlencoded, faraday::adapter::nethttp]>, @url_prefix=#<uri::https:0x007fc8c9ab2c20 url:https://graph.facebook.com/>, @proxy=nil> %%% before build_response, query db %%% sqlres [{"count"=>"5"}] %%% after build_response, query db 2014-10-22t14:04:51-0500: [worker(delayed_job host:steves-mbp.attlocal.net pid:19265)] job friendsrefresher (id=257) failed (0 prior attempts) activerecord::statementinvalid: pg::connectionbad: pqconsumeinput() : select count(*) users pg::connectionbad: pqsocket() can't socket descriptor: select count(*) pg_class c left bring together pg_namespace n on n.oid = c.relnamespace c.relkind in ('v','r') , c.relname = 'delayed_jobs' , n.nspname = (current_schemas(false))

does have ideas why daemonize , faraday interact in way screw postgres database connection?

alternatively, have suggestions how utilize delayed job in production environment deployed capistrano without using daemon mode?

ruby-on-rails postgresql delayed-job koala

No comments:

Post a Comment