PG::UnableToSend: 未连接到 Rails 中的服务器
PG::UnableToSend: no connection to the server in Rails
我有一个生产服务器 运行 ubuntu 14.04
、Rails 4.2.0
、postgresql 9.6.1
和 gem pg 0.21.0/0.20.0
。最近几天,在psql server
.
中访问table customer_input_datax_records
经常出错
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" != ) [["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" != )
调用访问数据库服务器的代码带有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 小时),问题开始出现。但是该应用程序似乎 运行 很好(使用 read/write 访问记录并创建新记录)。有一些关于该错误的在线帖子。但是问题似乎不是我遇到的问题。在我重新安装 psql 服务器之前,我想了解一下导致 no connection
.
的原因
更新:database.yml
production:
adapter: postgresql
encoding: unicode
host: localhost
database: wb_production
pool: 5
username: postgres
password: xxxxxxx
所以,错误是"RAILS: PG::UnableToSend: no connection to the server"。
这让我想起了 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
正如我们在评论中讨论的那样,问题似乎与您的 rufus
版本有关。
我建议您查看 whenever gem
并调用 rake 任务而不是直接调用 activerecord 模型。
然而,在 github 的 rufus-scheduler
回购中打开一个关于你的错误回溯的问题可能是个好主意(只是为了让大家知道...)
我有一个生产服务器 运行 ubuntu 14.04
、Rails 4.2.0
、postgresql 9.6.1
和 gem pg 0.21.0/0.20.0
。最近几天,在psql server
.
customer_input_datax_records
经常出错
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" != ) [["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" != )
调用访问数据库服务器的代码带有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 小时),问题开始出现。但是该应用程序似乎 运行 很好(使用 read/write 访问记录并创建新记录)。有一些关于该错误的在线帖子。但是问题似乎不是我遇到的问题。在我重新安装 psql 服务器之前,我想了解一下导致 no connection
.
更新:database.yml
production:
adapter: postgresql
encoding: unicode
host: localhost
database: wb_production
pool: 5
username: postgres
password: xxxxxxx
所以,错误是"RAILS: PG::UnableToSend: no connection to the server"。
这让我想起了 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
正如我们在评论中讨论的那样,问题似乎与您的 rufus
版本有关。
我建议您查看 whenever gem
并调用 rake 任务而不是直接调用 activerecord 模型。
然而,在 github 的 rufus-scheduler
回购中打开一个关于你的错误回溯的问题可能是个好主意(只是为了让大家知道...)