我正在尝试在ruby中评估javascript。
config/initializer/initializer_context.rb
js_str =
EXEC_PP_CONTEXT = ExecJS.compile("function test_add(param) { return param.a+ param.b;}")
然后在我的控制器中,我正在使用:
data_hash = {:a=>4,:b=>5}
EXEC_PP_CONTEXT.exec("return test_add(#{data_hash.to_json})")
但我偶尔会收到此错误(每100个请求中有1个)
can not use Context instance already associated with some thread
堆:
如果我已经将最大运行时间和最小运行时间设置为1,那么它是否应该首先避免此问题?
最终通过阅读Mozilla Rhino的代码找到了答案:https : //github.com/matthieu/rhymeno/blob/master/src/org/mozilla/javascript/Context.java#LC416
static final Context enter(Context cx, ContextFactory factory)
基本上,该方法计算上下文(使用它/执行它)内部的线程数,如果另一个线程尝试输入它,则抛出错误。
为了避免该问题并实现并发性,我们使用ruby的方法为每个线程懒惰地创建了一个上下文。 Thread[:current][:some_js_context] = blah_
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句