Sporadisch erhalten wir PG::UndefinedTable
Fehler bei der Verwendung von ActiveRecord. Der Name der Assoziationstabelle ist etwas wie beschädigt und ich sehe es oft
Cancelled
wird an das Ende des Tabellennamens angehängt.
Beispiel:
%Vor% Im obigen Beispiel habe ich den Tabellennamen mit foo
und bar
verschleiert.
Wir sehen diesen Fehler, wenn das Schienenprojekt in Puma ausgeführt wird. Warteschlange Arbeiter scheint in Ordnung zu sein.
Die Tabellen in der Fehlermeldung entsprechen nicht realen Tabellen oder Modellen. Es sieht wie der Fall von Speicherbeschädigung aus. Hat jemand solche Probleme gesehen? Wenn ja, wie hast du es geschafft?
Es sieht so aus, als ob ernten_Frequenz das Problem sein könnte. Ich habe ein paar Behauptungen gefunden, dass sie einen Threading Bug haben könnten. Ich würde versuchen, diese Option zu entfernen oder auf Null zu setzen und zu sehen, ob das funktioniert. Die einzige andere Sache, an die ich denken kann, ist, wenn Sie Thread.new manuell aufrufen und aktiven Datensatz darin verwenden. Hier sind die wenigen Ansprüche gegen das Ernten:
Suche nach "Fürchte den Schnitter" hier: Ссылка
Ich wage hier eine Vermutung, basierend auf diesem möglicherweise damit verbundenen Fehler ...
Aber Sie könnten entweder:
fork
in Ihrer Anwendung auf; ODER Beides führt zu einer Unterbrechung der ActiveRecord-Synchronisation und dazu, dass mehrere Prozesse den Datenbankverbindungspool freigeben, ohne dessen Verwendung zu synchronisieren (was zu Interlaced- und beschädigten Datenbankbefehlen führt).
Wenn Sie fork
verwenden, müssen Sie alle ActiveRecord-Datenbankverbindungen schließen und den Verbindungspool neu initialisieren (es gibt einen Funktionsaufruf, der das tut, aber ich erinnere mich nicht an meinen Kopf, vielleicht ActiveRecord.disconnect!
oder ActiveRecord.connection_pool.disconnect!
).
Andernfalls müssen Sie vor dem Ausführen von Puma (entweder während des Initialisierungsprozesses oder unter Verwendung von Pumas after_fork
) alle ActiveRecord-Datenbankverbindungen schließen und den Verbindungspool neu initialisieren.
Tags und Links ruby ruby-on-rails activerecord puma