我一直在调试一个似乎只会发生的奇怪的铁轨问题 当使用所有这四种宝石时:
基本上,如果我尝试通过考拉进行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部署的生产环境中有效使用延迟作业的建议?