Brauchen Sie noch einen TCP-Server neben einer Rails-Anwendung ausführen
-
02-07-2019 - |
Frage
Ich habe eine Rails 2.0.2 Anwendung mit einem postgresql db läuft. Die Maschine wird Daten über einen TCP-Port empfangen. Ich habe bereits einen Arbeits Rubin multithreaded TCP-Server codierte die Anfragen zu erhalten, aber ich brauche diesen Code neben meiner Rails-Anwendung ausgeführt werden.
Also ich denke, ich muß wissen, wie man einen neuen Prozess in Rails zu überbrücken, oder wie man einen Worker-Thread erstellen, die meine Gewinde TCP-Server-Schleife ausgeführt werden. Mein Rubin TCP-Server Zugriff auf Active haben könnte, aber es ist nicht notwendig (ich immer eine HTTP-Anforderung erstellen, um die empfangenen Daten an den ursprünglichen Rails Server Posting)
Lösung
Warum kompliziert? Führen Sie einfach die Anwendungen - Ihr TCP-Server und die Rails-Anwendung -. Seite an Seite
Entweder das Modell Tier ziehen (, und Active) in Ihren TCP-Server (SVN :: Äußerlichkeiten oder Kolben könnte gut für die Arbeit) und die Kommunikation lassen zwischen den beiden Anwendungen über die Datenbank geschehen, oder die Rails-Anwendung lassen die " Master“und mit ihm über HTTP kommunizieren, wie Sie vorschlagen.
Um eine Ruby-Anwendung in einem Windows-Dienst zu aktivieren, finden Sie in der win32-service
gem erhältlich von win32utils
Projekt: http: //rubyforge.org/projects/win32utils/
Andere Tipps
Ich brauche den TCP-Server als Dienst auf einem Windows 2003 Server ausgeführt werden. Ich benutze den mongrel_service Rails als Dienst zu laden, und ich weiß nicht, einen Weg, das gleiche für reinen Ruby-Code zu tun. Wenn ich könnte meine tcp-Server erhalten gestartet, wenn der Computer startet, ich in Ihre Lösung aussehen wird (was doch ziemlich gut scheint).
Sie machen nicht Ihre Rails-Anwendung für den Zustand der TCP-Server-Anwendung verantwortlich. Es ist wirklich nicht sehr gut geeignet, um das zu tun - und es gibt wahrscheinlich keinen Grund, dass sie miteinander in absolutem Lock-Step gestartet werden müssen. Verwenden Sie monit oder etwas beiden Serverprozesse zu überwachen.
Es ist unmöglich, mit Sicherheit zu sagen, ohne mehr von Ihrer App-Architektur zu wissen, aber ich würde mit Active und die Datenbank vorschlagen zwischen Ihren Servern anstelle von HTTP zu kommunizieren. Auf diese Weise, auch wenn Ihre Rails-Anwendung ist nach unten aus irgendeinem Grund Ihre anderen Server kann noch verarbeiten Anfragen. Es wird wohl auch ein bisschen flotter sein.