У меня есть приложение Rails, которое должно запустить скрипт узла. Я полагаю, что использование драгоценного камня ExecJS - самый чистый способ запустить JavaScript из приложения Rails. Тем не менее, пока что ExecJS оказался очень разочаровывающим в использовании.
Вот скрипт, который мне нужно запустить:
// Generated by CoffeeScript 1.7.1
(function() {
var PDFDocument, doc, fs;
fs = require("fs");
PDFDocument = require('pdfkit');
doc = new PDFDocument;
doc.pipe(fs.createWriteStream('output.pdf'));
doc.addPage().fontSize(25).text('Here is some vector graphics...', 100, 100);
doc.save().moveTo(100, 150).lineTo(100, 250).lineTo(200, 250).fill("#FF3300");
doc.scale(0.6).translate(470, -380).path('M 250,75 L 323,301 131,161 369,161 177,301 z').fill('red', 'even-odd').restore();
doc.addPage().fillColor("blue").text('Here is a link!', 100, 100).underline(100, 100, 160, 27, {
color: "#0000FF"
}).link(100, 100, 160, 27, 'http://google.com/');
doc.end();
}).call(this)
С моей консоли Rails я пытаюсь это сделать:
[2] pry(main)> file = File.open('test.js').read
[3] pry(main)> ExecJS.eval(file)
ExecJS::ProgramError: TypeError: undefined is not a function
from /Users/matt/.rvm/gems/ruby-2.1.0/gems/execjs-2.0.2/lib/execjs/external_runtime.rb:68:in 'extract_result'
Обратите внимание, что я могу успешно запустить этот скрипт, используя 'node test.js', и я также могу запустить скрипт, используя синтаксис backtick, предлагаемый Ruby:
'node test.js'
Но это похоже на взлом...