Frage

Ich bin die Integration einiger nicht-Schienen-Modell Tabellen in meiner Rails-Anwendung. Alles funktioniert sehr gut aus, so wie ich das Modell aufgebaut ist:

class Change < ActiveRecord::Base
  establish_connection(ActiveRecord::Base.configurations["otherdb_#{RAILS_ENV}"])
  set_table_name  "change"
end

So kann ich das Change Modell für alle vorhandenen Datensätze mit find usw. verwenden kann.

Nun würde Ich mag eine Art von Meldung laufen, wenn ein Datensatz in der Tabelle hinzugefügt wird. Da das Modell nie über Change.new und Change.save mit ActiveRecord::Observer erstellt wird, ist keine Option.

Gibt es eine Möglichkeit ich einige meiner Rails-Code erhalten können ausgeführt werden, wann immer ein neuer Datensatz hinzugefügt wird? Ich sah delayed_job kann aber nicht ganz meinen Kopf herum, wie das einzurichten. Ich stelle mir vor es entwickelt sich um einen cron-Job, dass wählt alle Zeilen, die in dem seit der Job zuletzt ausgeführt wurde erstellt und ruft dann die entsprechende Rails-Code für jede Zeile.

Aktualisieren Zur Zeit bei Javan sucht Wann immer , sieht aus wie kann es lösen die 'Laufschienen-Code von cron Teil'.

War es hilfreich?

Lösung 2

Dies ist, was ich schließlich tat: Verwenden Sie Wann immer , weil es schön mit Capistrano integriert und zeigte mir wie Rails Code aus cron laufen. Mein fehlender Frieden war im Grunde

script/runner -e production 'ChangeObserver.recentchanges'

, die nun alle 5 Minuten ausgeführt wird. Die recentchanges liest die letzten nachgeschlagenen bei ID aus einer tmp-Datei, alle Datensätze neu Change zieht, die eine höhere ID hat als die und führt den normalen Beobachter Code für jeden Datensatz (und speichert die höchsten nachgeschlagenen bei ID an die tmp-Datei natürlich).

Andere Tipps

Ja, Sie werden entweder irgendeine Art von Hintergrund-Task-Prozessor wollen (Delayed :: Job ist eine der populäreren, oder Sie können gefälschte eigene Faust mit dem Daemon Bibliothek oder ähnliches) oder ein Cronjob einrichten, dass läuft auf einige Art Zeitplan. Wenn Sie häufig überprüfen wollen (jede Minute, sagen wir) Ich würde die Verzögerte :: Job Route empfehlen, wenn es länger ist (jede Stunde oder so) einen cron-Job es nur gut tun wird.

Going the DJ Route, müssen Sie einen Job erstellen, die für neue Datensätze überprüfen würde, sie bearbeiten, wenn es welche gibt, dann den Job requeue, da jeder Auftrag markiert ist „abgeschlossen“, wenn es fertig ist.

-Jon

Wie üblich bei Statusänderungen überwachen, gibt es zwei Ansätze: Polling und Benachrichtigung. Sie scheinen jetzt zu haben, entschied sich für die Wahl Weg zu gehen (einen cron-Job Blick auf den Zustand der Datenbank in regelmäßigen Abständen mit und einige Code auszuführen, wenn das geändert) Sie können das gleiche tun mit einer der Schienen Disponenten, gibt es ein paar da draußen (Google wird sie leicht finden sie verschiedene Feature-Sets haben, lasse ich Sie wählen, die Ihren Bedürfnissen passt, wenn Sie auf diese Weise bekam)

Sie könnten auch die Benachrichtigung Art und Weise abhängig von Ihrer Datenbank zu gehen versuchen. Einige Datenbank-Unterstützung sowohl Trigger und externen Prozessausführung oder spezifische Benachrichtigungsprotokolle. In diesem Fall werden Sie durch die Datenbank selbst darüber informiert, dass die Tabelle geändert. es gibt viele solche Möglichkeiten für verschiedene DBMS in Ereignisse aus einer Datenbank

Ankommen
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top