Verbindungs-pool-Problem mit ActiveRecord-Objekte in rufus-scheduler -

Ich bin mit rufus-scheduler zum ausführen einer Reihe von häufigen Aufträgen, die einige verschiedene Aufgaben mit ActiveRecord-Objekten. Wenn es irgendeine Art von Netzwerk-oder postgresql-Schluckauf, auch nach der Wiederherstellung alle threads werfen die folgende Fehlermeldung, bis der Prozess neu gestartet wird:

ActiveRecord::ConnectionTimeoutError (konnte nicht erhalten Sie eine Datenbank-Verbindung innerhalb von 5 Sekunden gewartet 5.000122687 Sekunden). Die max pool size ist derzeit 5; erhöhen Sie es.

Kann der Fehler leicht nachvollzogen werden, indem Neustart von postgres. Ich habe versucht zu spielen (bis zu 15) mit dem pool der Größe, aber kein Glück gibt.

Führt mich zu glauben, die verbindungen sind nur in einem veralteten Zustand, ich dachte, das wäre behoben, durch den Aufruf von clear_stale_cached_connections!.

Ist es ein zuverlässiger Muster, dies zu tun?

Den block übergeben wird, ist eine einfache select-und update-aktiven Datensatz aufrufen, und geschieht, egal, was die AR-Objekt ist.

Den rufus job:

scheduler.every '5s' do
  db do
    DataFeed.update  #standard AR select/update
  end
end

wrapper:

  def db(&block)
    begin
      ActiveRecord::Base.connection_pool.clear_stale_cached_connections!
      #ActiveRecord::Base.establish_connection    # this didn't help either way
      yield block
    rescue Exception => e
      raise e
    ensure
      ActiveRecord::Base.connection.close if ActiveRecord::Base.connection
      ActiveRecord::Base.clear_active_connections!
    end
  end
  • alle update drauf?
  • Ich bin auch vor demselben Problem, habe versucht, oben und schon ActiveRecord::Base.connection_pool.with_connection tun, aber nicht arbeiten
InformationsquelleAutor ericvg | 2012-06-28
Schreibe einen Kommentar