2017-11-26 4 views
0

Ich habe einen Server (Sinatra), den ich verwenden möchte, um ein geplantes Ruby-Skript auszuführen und zu überwachen. Dieses Skript muss dem Server-Skript Statusaktualisierungen zurückgeben können, und der Server muss dieses untergeordnete Skript mit Argumenten ausführen können.Server mit anderen Ruby-Skripten

Abgesehen von der vollständigen Implementierung des Codes aus dem untergeordneten Skript in das Server-Skript, wäre die einzige Möglichkeit, dies zu tun, die Verwendung globaler Variablen. Aber ich bin besorgt, da dies sehr unordentlich werden könnte, wenn ich diese Art von Setup über mehrere Server-Skripte mache, und ich weiß, dass globale Variablen verpönt sind.

Was ist der beste Weg, um mit dieser Situation umzugehen? Ich habe nicht wirklich Module verwendet, aber ich sehe nicht, wie ich Module verwenden konnte, wenn ich das Kind brauche, um Updates zurück zum Elternteil zu schicken.

Antwort

0

Es gab eine Antwort über das Erstellen von Backround-Aufgaben für Sinatra, das zeigte um diesen Blog:

http://blog.markwatson.com/2011/11/ruby-sinatra-web-apps-with-background.html

Hinweis: habe ich die vollständige Adresse, weil einige Zeit der Linksetzung verändert. Hier

ist der Extrakt aus dem Beispiel natürlich nicht zeigen, wie Parameter zu übergeben, aber man kann die Grundidee

require 'rubygems' 
require 'sinatra' 

$sum = 0 

Thread.new do # trivial example work thread 
    while true do 
    sleep 0.12 
    $sum += 1 
    end 
end 

get '/' do 
    "Testing background work thread: sum is #{$sum}" 
end 

erfassen Sie können paramters an den Thread übergeben sowie empfangen Rückgabeparameter aus es. Überprüfen Sie die Antwort von Vinay: https://stackoverflow.com/a/1383464/1175090

+0

Vielen Dank für den Link. Also sagst du, dass es am besten ist, den Code von meinem anderen Skript direkt in das Server-Skript zu implementieren? Gibt es keine Möglichkeit, den Code in mehrere Dateien zu trennen und eine Möglichkeit zu haben, Werte aus dem Kindcode zurück an den Elterncode zu senden? – Max

+0

Sie können immer von der Thread-Klasse in Ihre eigene Implementierung eine externe Datei mit dem Inhalt Ihres Skripts erben. Um einen Wert aus dem Thread zurückzugeben, wartest du auf den Thread mit 'my_thread.join' (siehe den letzten Link). –

Verwandte Themen