PG :: UnableToSend:在Rails中没有与服务器的连接

问题描述 投票:2回答:2

我有一个生产服务器运行ubuntu 14.04Rails 4.2.0postgresql 9.6.1与gem pg 0.21.0/0.20.0。在过去的几天里,在customer_input_datax_records访问表psql server时经常出错。

D, [2017-07-20T18:08:39.166897 #1244] DEBUG -- :   CustomerInputDatax::Record Load (0.1ms)  SELECT "customer_input_datax_records".* FROM "customer_input_datax_records" WHERE ("customer_input_datax_records"."status" != $1)  [["status", "email_sent"]]
E, [2017-07-20T18:08:39.166990 #1244] ERROR -- : PG::UnableToSend: no connection to the server
: SELECT "customer_input_datax_records".* FROM "customer_input_datax_records" WHERE ("customer_input_datax_records"."status" != $1)

调用访问数据库服务器的代码是使用Rufus scheduler 3.4.2循环:

s = Rufus::Scheduler.singleton
s.every '2m' do

    new_signups = CustomerInputDatax::Record.where.not(:status => 'email_sent').all

.......
end

重启服务器后,通常会有第一个请求(或几个)。但过了一段时间(例如,1或2小时),问题就开始出现了。但该应用似乎运行良好(访问记录与读/写和创建新)。有一些关于错误的在线帖子。然而问题似乎不是我所拥有的。在我重新安装psql服务器之前,我想了解一下导致no connection的原因。

更新:database.yml

production:
  adapter: postgresql
  encoding: unicode
  host: localhost
  database: wb_production
  pool: 5
  username: postgres
  password: xxxxxxx
ruby-on-rails postgresql pg
2个回答
3
投票

所以,错误是“RAILS:PG :: UnableToSend:没有连接到服务器”。

这让我想起了Connection pool issue with ActiveRecord objects in rufus-scheduler

你可以做到

s = Rufus::Scheduler.singleton
s.every '2m' do

  ActiveRecord::Base.connection_pool.with_connection do
    new_signups = CustomerInputDatax::Record
      .where.not(status: 'email_sent')
      .all
    # ...
  end
end

挖掘

能够更多地了解这个问题会很棒。

我建议尝试这段代码:

s = Rufus::Scheduler.singleton

def s.on_error(job, error)

  Rails.logger.error(
    "err#{error.object_id} rufus-scheduler intercepted #{error.inspect}" +
    " in job #{job.inspect}")
  error.backtrace.each_with_index do |line, i|
    Rails.logger.error(
      "err#{error.object_id} #{i}: #{line}")
  end
end

s.every '2m' do
  new_signups = CustomerInputDatax::Record.where.not(:status => 'email_sent').all
  # .......
end

一旦问题出现,我就会在Rails日志中查找on_error完整输出。

这个on_error来自https://github.com/jmettraux/rufus-scheduler#rufusscheduleron_errorjob-error


1
投票

正如我们在评论中讨论的那样,问题似乎与您的rufus版本有关。我建议你查看whenever gem并调用rake任务,而不是直接调用activerecord模型。

但是,在github上的rufus-scheduler repo中打开错误回溯的问题可能是一个好主意(只是为了让我们知道......)

© www.soinside.com 2019 - 2024. All rights reserved.