Aufruf des Node.js-Skripts aus der Rails-App mit ExecJS

8

Ich habe eine Schienenanwendung, die ein Knotenscript ausführen muss. Ich stelle mir vor, dass die Verwendung des ExecJS Gems der sauberste Weg ist, js aus einer Rails App zu starten. Bislang hat sich ExecJS als sehr frustrierend erwiesen.

Hier ist das Skript, das ich ausführen muss:

%Vor%

Von meiner Rails-Konsole aus versuche ich Folgendes:

%Vor%

Beachten Sie, dass ich dieses Skript mit 'node test.js' erfolgreich ausführen kann und das Skript auch mit der Backtick-Syntax ruby ​​offers ausführen kann:

%Vor%

Aber das fühlt sich an wie ein Hack ...

Irgendwelche Abnehmer?

    
matt walters 04.04.2014, 01:48
quelle

3 Antworten

3

Es tritt ein Fehler auf, weil require () von EvalJS nicht unterstützt wird. 'require' ist nicht definiert, undefined ist keine Funktion. ;)

    
seanmakesgames 23.10.2015 05:46
quelle
2

Ich bin mir der Antwort nicht sicher, aber vielleicht müssen Sie die Umgebungsvariable exec_js_runtime als Knoten definieren.

Etwas wie ENV['EXECJS_RUNTIME'] = 'Node' Sie können versuchen, es in die Datei config / boot.rb zu legen oder einfach die EXECJS_RUNTIME in Ihrer Umgebung zu definieren, etwa export EXECJS_RUNTIME=Node

Ich hoffe, es hilft

    
Oxynum 04.04.2014 02:04
quelle
1

ExecJS-Leute sagen , dass Sie commonjs.rb Ссылка

  

Warum kann ich CommonJS require () nicht in ExecJS verwenden?

     

ExecJS bietet eine Schnittstelle mit dem kleinsten gemeinsamen Nenner für alle   JavaScript-Laufzeit Verwenden Sie ExecJS, wenn es egal ist, welches JavaScript   Interpreter, in dem der Code ausgeführt wird. Wenn Sie auf die Node-API zugreifen möchten,   sollte überprüfen, eine andere Bibliothek wie commonjs.rb entworfen, um eine   konsistente Schnittstelle.

Aber das funktioniert im Grunde nicht. Das require verhält sich völlig unberechenbar - ich musste npm -g install pdfkit fs zwischen env = und env.require in

ausführen %Vor%

Damit die Modul-Suche funktioniert, und wenn ich versucht habe, path auf den Ordner node_modules zu zeigen, wäre es unmöglich, dass der Edelstein script findet (ganz zu schweigen von den #new und require sind im Grunde die einzigen dokumentierten Methoden - nur Methoden afaik - und #new sind fehldokumentiert: P)

Ihre Möglichkeiten soweit ich das beurteilen kann:

  1. system(node ...) - Du kannst Cocaine verwenden, um ein paar Tricks zu vermeiden (Piping-Ausgabe, Fehlerbehandlung, Leistungsoptimierungen, ...) und ausführen eine sauberere Syntax - das ist nicht so schlimm, wie es aussieht - so macht Büroklammer Bildnachbearbeitung ( imagemagick Systempaket + cocaine ), also denke ich, es ist sehr stabil und sehr machbar
  2. Expose zu Web-API und führen Sie einen separaten Arbeiter auf einem freien Heroku-Dyno zum Beispiel, um dies und ähnliches zu tun, die Sie mit Node-Bibliotheken tun wollen
  3. benutze prawn :)
bbozo 15.12.2015 18:17
quelle