我正在使用 Dashing-rails(它使用 Rufus-scheduler)将更新发送到浏览器小部件。
在浏览器向页面发出 5 次单独请求后,站点由于以下原因而崩溃:“ActiveRecord::ConnectionTimeoutError”。
我的假设是每个浏览器请求触发器创建一个 rufus-scheduler 线程。该线程发送更新并且线程保持 ActiveRecord 连接而不放手,最终导致超时。
但是,我尝试确保计划释放与 ActiveRecord 池的连接无济于事。
Dashing.scheduler.every '10s', :allow_overlapping => false do
ActiveRecord::Base.connection_pool.with_connection do
Dashing.send_event('past_hour', { value: Device.sightings_past_hour })
d = Device.where("company != ''").last
company = d.company !="" ? d.company : "Device Manufacturer Not Found"
Dashing.send_event('last_MAC', { text: "#{company}",
moreinfo: "MAC Address: #{d.macaddress}"})
Dashing.send_event('macaddresses', { current: Device.total_Count })
top_manufacturers=Device.manufacturers_dashboard
Dashing.send_event('manufacturers', {items: top_manufacturers})
Dashing.send_event('past_day', { current: Device.sightings_past_day })
end
ActiveRecord::Base.connection_pool.release_connection
end
有没有办法查看每个线程上正在运行哪些进程/什么保持 ActiveRecord 连接?或者如果这是问题,请阻止 Dashing-rails 保持 ActiveRecord 连接?