2017-07-20 3 views
0

Ich habe einen Produktionsserver ubuntu 14.04, RAILS 4.2.0, postgresql 9.6.1 mit Edelstein pg 0.21.0/0.20.0 ausgeführt. In den letzten Tagen gibt es ständig Fehler beim Zugriff auf eine Tabelle customer_input_datax_records in psql server.RAILS: PG :: UnableToSend: keine Verbindung zum 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) 

Der Code, den DB-Server zuzugreifen Aufruf wird mit Rufus scheduler 3.4.2 loop:

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

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

....... 
end 

Nach dem Neustart des Server, in der Regel dort mit erster Anforderung (oder wenige). Aber nach einiger Zeit (z. B. 1 oder 2 Stunden) beginnt sich das Problem zu zeigen. Aber die App scheint gut zu laufen (Zugriff auf Datensätze mit Lesen/Schreiben & Erstellen neuer). Es gibt einige Online-Posts über den Fehler. Aber das Problem scheint nicht das zu sein, das ich habe. Bevor ich den psql-Server neu installiere, möchte ich einige Ideen dazu bekommen, was die no connection verursacht. Danke vielmals.

UPDATE: database.yml

production: 
    adapter: postgresql 
    encoding: unicode 
    host: localhost 
    database: wb_production 
    pool: 5 
    username: postgres 
    password: xxxxxxx 
+0

Sind Sie dieses Problem in der Entwicklung mit oder Produktion? Sind Ihre lokalen Verbindungen zur Datenbank vertrauenswürdig? – mabe02

+0

Könnten Sie Ihrer Frage das 'database.yml' für Ihre Umgebung hinzufügen? Sind Sie sicher, dass Ihre pg_hba.conf [richtig eingerichtet] ist (https://github.com/mberlanda/wedwip#how-to-setup-your-postgresql-db)? – mabe02

+0

Es ist ein On-Production-Server. Der Server läuft seit über einem Jahr und das Problem ist neu. Es gibt keine Änderungen an der Konfiguration. – user938363

Antwort

1

So ist der Fehler "RAILS: PG :: UnableToSend: keine Verbindung zum Server".

Das hat mich von Connection pool issue with ActiveRecord objects in rufus-scheduler

erinnert könnten Sie tun

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 

Graben Es wäre toll, mehr über das Problem zu kennen.

Ich würde vorschlagen, diesen Code versuchen:

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 

Sobald das Problem von selbst manifestiert, würde ich für die on_error volle Leistung schaut in den Rails loggen sein.

Diese on_error stammt aus https://github.com/jmettraux/rufus-scheduler#rufusscheduleron_errorjob-error

1

Wie wir in den Kommentaren zu diskutieren, scheint das Problem zu Ihrer rufus Version verwendet. Ich würde vorschlagen, dass Sie whenever gem auschecken und eine Rake-Task aufrufen, anstatt direkt das ActiveRecord-Modell aufzurufen.

Es könnte sein, eine gute Idee, aber mit der Rückverfolgung Ihrer Fehler ein Problem zu öffnen, in dem rufus-scheduler Repo auf Github (nur damit dann wissen ...)

+0

Ja, es wäre gut, eine Rückverfolgung des Fehlers zu sehen. – jmettraux

Verwandte Themen