Execjs使用一些额外的node_module从Ruby执行nodejs代码

时间:2018-12-06 07:12:26

标签: ruby-on-rails node.js ruby node-modules

我在rails env上有红宝石,我想从我的Rails应用程序中执行nodejs命令。

我可以在下面的脚本中执行,而且可以正常工作

require 'execjs'
context = ExecJS.compile('function double(x) { return x * 2 }')
puts context.call('double', 10)

现在我想使用一些额外的节点模块来使用。

context = ExecJS.compile('var redis = require('redis');
var client = redis.createClient();client.on('connect', function() {    console.log('Redis client connected');});
             function selectdb(number) { client.select(number);}')

        context.call('selectdb', 1)

在require块上出现了一个错误,我们没有注入外部节点模块。

有什么方法可以在运行时代码块中注入额外的模块。

我看到了itchle-rb的一些解决方案/解决方法,但它不起作用。 请建议我是否做错了什么,或者使用其他方法使用Rails应用程序中的nodejs代码。

1 个答案:

答案 0 :(得分:0)

您不能执行此操作,至少不能使用ExecJS的原始实现。 (建议的替代方法是使用commonjs.rb

检查FAQ here

  

为什么我不能在ExecJS中使用CommonJS require()?

     

ExecJS提供了最低的公分母接口   JavaScript运行时。不管哪个JavaScript都不重要,请使用ExecJS   解释器,您的代码将在其中运行。如果要访问Node API,则可以   应该检查另一个像commonjs.rb这样的库,该库旨在提供   一致的界面。