delayed_job,守护进程,考拉,pg的奇怪交互

时间:2014-10-22 19:41:13

标签: ruby-on-rails postgresql delayed-job koala

我一直在调试一个似乎只会发生的奇怪的铁轨问题 当使用所有这四种宝石时:

  • delayed_job的
  • 守护程序
  • 考拉
  • PG

基本上,如果我尝试通过考拉进行facebook图表api调用 从延迟的工作,我的postgres服务器连接被破坏了 不会重新连接。

通过在各种宝石(本地副本)中引入日志记录语句, 我已经设法将其发生在电话会议中 Faraday.get(考拉使用Faraday for HTTP)。 更具体地说,它发生在build_response中。

如果我通过&#bin; delayed_job start' 导致调用daemonize()

的方法

如果我通过rake任务启动delayed_job工作' rake jobs:work', 问题无法重现。

以下是在守护程序模式下运行时的示例诊断输出。对不起 我没有堆栈跟踪,因为delayed_job没有提供堆栈跟踪 错误输出:

%%% before Koala.make_request, about to query db
%%% sqlres is [{"count"=>"5"}]
%%% before Faraday.new, about to query db
%%% sqlres is [{"count"=>"5"}]
%%% after Faraday.new, about to query db
%%% sqlres is [{"count"=>"5"}]
%%% about to send get to #<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, about to query db
%%% sqlres is [{"count"=>"5"}]
%%% after build_response, about to 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) with ActiveRecord::StatementInvalid:         PG::ConnectionBad: PQconsumeInput() : Select count(*) from users
PG::ConnectionBad: PQsocket() can't get socket descriptor:               SELECT COUNT(*)
              FROM pg_class c
              LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
              WHERE c.relkind in ('v','r')
              AND c.relname = 'delayed_jobs'
              AND n.nspname = ANY (current_schemas(false))

有没有人对daemonize和Faraday为何会互动有任何想法 以这种方式搞砸了我的postgres数据库连接?

或者,您是否有任何关于如何在不使用守护程序模式的情况下在使用Capistrano部署的生产环境中有效使用延迟作业的建议?

0 个答案:

没有答案