I have a Rails application that should run a node script. I believe that using the ExecJS gem is the cleanest way to run JavaScript from a Rails application. However, for now, ExecJS has been very frustrating to use.
Here is the script I need to run:
// 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)
From my Rails console, I'm trying to do this:
[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'
Note that I can successfully run this script using 'node test.js', and I can also run the script using the backtick syntax suggested by Ruby:
'node test.js'
But it looks like a hack ...
matt walters
source share