1

Ich erstelle eine neue Rails-APP, die mit der gleichen Postgres-DB wie meine API funktioniert.Schienen - Postgres auslösen Aktion mit einer Methode?

Die API und die APP hat ein paar gemeinsame Modelle.


Exemple:

Die API und die APP hat eine Connection Modell

Die APP wird ein einfaches connection im DB erstellen und die API den Rest (wie Handler mit dem connection für viele Dinge)


Also wollte ich Hair Trigger verwenden, die eine DB auslösen erlaubt Einfügen, oder aktualisieren und wie es zu einem DB-Verhalten, das ausgeführt wird.

Aber ich würde gerne eine Methode von einem meiner Helfer ausführen.

wie folgt aus:

class Connection < ActiveRecord::Base 

trigger.after(:insert) do 
    SomeObject.method()  
end 

end 

ich nicht after_create verwenden können, weil die Schöpfung Aktion nicht auf dem gleichen Server (aber gleiche DB)

irgendwelche Ideen getan wird?

Danke!

+0

Also, was ist das Problem mit der Verwendung dieses Edelsteins? –

+0

es scheint, nur SQL-String zwischen den do ... End Statements dauert aber ich möchte einen Aufruf an eine Methode übergeben (mit dem Objekt eingefügt) – F4Ke

+0

Ich bin auch auf der Suche nach diesem. – dyeje

Antwort

0

Der Grund, warum Hair Trigger nur SQL unterstützt, besteht darin, dass es Ihnen hilft, Datenbankauslöser zu verwalten (https://www.postgresql.org/docs/9.6/static/sql-createtrigger.html).

Datenbank-Trigger sind von Ihrer Anwendung entkoppelt und können nur SQL in Ihrer Datenbank auslösen. Es wird tatsächlich keinen Code innerhalb Ihrer Anwendung auslösen können.

Eine Lösung für Ihr Problem wäre die Verwendung von Ereignissen. Wenn Sie jemals mit Javascript gearbeitet haben, sind Sie vielleicht schon einmal auf Event und EventListener gestoßen. Der Zweck von Ereignissen besteht darin, Ihren Code zu entkoppeln. Ein Teil Ihrer Anwendung sendet ein Ereignis, wenn eine Aktion ausgeführt wurde, z. Etwas wurde in die Datenbank eingefügt. Andere Teile Ihrer Anwendung, so viele Sie möchten, können dann zu diesen Ereignissen abonnieren und die erforderlichen Maßnahmen ergreifen.

Da Sie mit Rails arbeiten, würde ich Ihnen empfehlen, das Wisper-Juwel (github.com/krisleech/wisper) genauer unter die Lupe zu nehmen. Wenn Ihre App und API; Wie Sie beschreiben, lebt in verschiedenen Prozessen (oder Servern), sollten Sie prüfen, mit einem Hintergrund-Worker, um die Ereignisse asynchron zu behandeln. Ein gängiger Ansatz hierfür ist die Verwendung von Sidekiq Wisper (github.com/krisleech/wisper-sidekiq), mit der Sie die Ereignisse mithilfe von Sidekiq als Hintergrundarbeiter asynchron auslösen können.

Für eine gute Einführung in das Thema, hier ist ein Leitfaden für Sie (Ich bin nicht der Autor) loszuzulegen: http://www.g9labs.com/2016/06/23/rails-pub-slash-sub-with-wisper-and-sidekiq/

Es könnte einfache Möglichkeiten, das Problem zu lösen, die Sie konfrontiert sind, aber Sie werden müssen posten Sie weitere Details zum Anwendungsfall, damit wir Ihnen bessere Hinweise geben können.

Verwandte Themen