7 Stimmen

Aufrufen von Lisp aus Ruby/Rails?

Wie kann man ein Lisp-Programm aus einer Rails-Anwendung aufrufen?... Zum Beispiel, damit der Endbenutzer einen Textblock in die Rails-Webanwendung eingeben kann, der Text durch das Lisp-Programm verarbeitet wird und die Ergebnisse an die Rails-Anwendung zurückgegeben werden?

11voto

mipadi Punkte 377834

Es gibt einige Möglichkeiten, die mir in den Sinn kommen:

  1. Führen Sie das Lisp-Programm mit Prozess . Kommunizieren Sie mit dem Lisp-Programm über standard in, und lassen Sie das Lisp-Programm sein Ergebnis über stdout ausgeben.

  2. Machen Sie dasselbe wie oben, aber kommunizieren Sie über benannte Rohre stattdessen. Lassen Sie Ihren Ruby-Code Daten schreiben en eine benannte Pipe, dann soll das Lisp-Programm aus dieser Pipe lesen und Daten schreiben aus über eine andere benannte Pipe, die Sie dann mit Ihrer Ruby-Anwendung lesen. Das Lisp-Programm kann entweder im Hintergrund als Daemon laufen, der auf Daten in der eingehenden Pipe prüft, oder Sie können es bei Bedarf mit den Ruby-Kommandozeilen-Dienstprogrammen (wie oben) starten.

  3. Finden Sie eine Ruby-Lisp-Brücke. Ich habe keine Erfahrung mit einer solchen Brücke (noch weiß ich aus dem Stegreif, ob es überhaupt eine gibt), und ich denke, dass die oben genannten 2 Mechanismen einfacher sind, aber Ihre Erfahrungen können variieren.

9voto

Rainer Joswig Punkte 131198

Eine andere einfache Möglichkeit ist, Lisp einen HTTP-Server laufen zu lassen und Lisp von außen über HTTP-Anfragen zu kontaktieren.

4voto

jlf Punkte 3411

CL-JSON unterstützt JSON-RPC . Es ist sehr einfach, einen Webserver wie Hunchentoot einen Lisp-basierten Webdienst zu haben, der alles kann, was JSON-RPC spricht (z.B. este ) verwenden können.

2voto

DigitalRoss Punkte 138823

Das hängt davon ab, wie oft es vorkommen wird.

  • Wenn es nur ab und zu vorkommt, dann führen Sie einfach einen Backquote-Befehl aus, der den Lisp-Interpreter startet, oder popen Sie ihn und schreiben Sie in ihn.
  • Wenn das ständig passiert, müssen Sie Lisp bereits laufen haben, und die Frage ist dann, wie man kommuniziert. Jeder der Interprozessor-Mechanismen wird funktionieren, aber ich würde einen TCP-Socket für die Entwicklung, das Testen und die Produktionsflexibilität vorschlagen.
  • Wenn es eine Million Mal am Tag passiert, aber ein Spielzeug-Lisp gut genug wäre, ist es eine einfache Sache, Lisp mit Ruby-Klassen zu implementieren. Dies wurde als Kapitel 8 von Praktische Ruby-Projekte .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X