Jruby和Forking

时间:2013-09-10 15:12:26

标签: jvm fork jruby jvm-arguments

为一家大公司工作,我们使用parallel_tests gem来运行我们的黄瓜自动化。这适用于我们的Ruby部门,但对于我们的Jruby人,我们需要另一种选择。问题是Jruby(截至1.7)fork生成了一个没有JVM选项的新Java JVM。我已经发现我需要两个解决方案中的一个,而且我不确定如何实现其中任何一个。

  1. 我们需要能够将JVM选项传递给fork,以便我们可以获得所需的所有选项。
    1. 我们需要更改gem处理分叉的方式,以便所有进程都在同一个JVM上运行
    2. 我不知道这些解决方案是否有可能,但也许其他人会更清楚

      根据Alternative for spawning a process with 'fork' in jRuby?

      发布的解决方案

      我找到了解决方法。我们可以使用JRuby中的内置库FFI来模拟' MRI中的Process.fork。

      模仿MRI Ruby中的Process.fork

      模块JRubyProcess   要求' ffi'   扩展FFI :: Library   ffi_lib FFI :: Library :: LIBC   attach_function:fork,[],:int 端

      pid = JRubyProcess.fork   #做你的工作 结束 更多细节:

      https://github.com/ffi/ffi

      http://blog.headius.com/2008/10/ffi-for-ruby-now-available.html

      另一种选择是使用勺子: https://github.com/headius/spoon

      我不是linux大师,但这些似乎是实现Jruby的简单方法。有谁知道这是否是一个有效的解决方案?

1 个答案:

答案 0 :(得分:0)

我认为没有任何安全的方法可以像使用红宝石一样分叉jvm。有一个名为childprocess的gem,它提供跨平台进程管理。

我创建了一个名为jcukeforker的宝石,可以在jruby中的parrellel中运行这两个功能和场景。

随意提交问题或拉取请求,以便在子流程上设置环境变量。仅当您希望子流程具有与父流程不同的环境变量时,这才有意义。