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?
Es tritt ein Fehler auf, weil require () von EvalJS nicht unterstützt wird. 'require' ist nicht definiert, undefined ist keine Funktion. ;)
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
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
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:
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 prawn
:) Tags und Links ruby javascript ruby-on-rails node.js execjs