0

在一家大公司工作,我们正在使用 parallel_tests gem 来运行我们的黄瓜自动化。这适用于我们的 Ruby 部门,但对于我们的 Jruby 人员,我们需要另一种选择。问题是 Jruby(从 1.7 开始)fork 生成了一个没有 JVM 选项的新 java JVM。我发现我需要 2 个解决方案中的 1 个,但我不确定如何实施其中任何一个。

  1. 我们需要能够将 JVM 选项传递给 fork,这样我们才能获得所需的所有选项。

或者

  1. 我们需要更改 gem 处理分叉的方式,以便所有进程都在同一个 JVM 上运行

我不知道这两种解决方案是否可行,但也许其他人会更清楚

根据在替代品上发布的在 jRuby 中使用“fork”生成进程的解决方案?

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

模仿 MRI Ruby 中的 Process.fork

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

pid = JRubyProcess.fork do #do_your_work end 更多细节:

https://github.com/ffi/ffi

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

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

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

4

1 回答 1

0

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

我创建了一个名为jcukeforker的 gem ,它可以在 jruby 中并行运行功能和场景。

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

于 2014-08-09T21:02:48.373 回答