【问题标题】:JRuby + minitest failing because of ObjectSpace由于 ObjectSpace,JRuby + minitest 失败
【发布时间】:2011-07-29 09:53:42
【问题描述】:

我是 JRuby 新手,我正在尝试让我的测试套件正确运行。我正在使用 minitest,看起来 minitest 需要启用 ObjectSpace。我已经尝试了以下每个命令:

bundle exec jruby -X+O -S rake
jruby -X+O -S bundle exec rake
JRUBY_OPTS="-X+O" bundle exec rake
export JRUBY_OPTS="-X+O" && bundle exec rake

所有这些都会导致以下堆栈跟踪:

RuntimeError: ObjectSpace is disabled; each_object will only work with Class, pass -X+O to enable
each_object at org/jruby/RubyObjectSpace.java:167
     each at org/jruby/RubyEnumerator.java:189
     to_a at org/jruby/RubyEnumerable.java:375
      AWS at /Users/kshipley/.rvm/gems/jruby-1.6.2@split/bundler/gems/papi-38fc7d34a33d/lib/papi/aws.rb:1476
     Papi at /Users/kshipley/.rvm/gems/jruby-1.6.2@split/bundler/gems/papi-38fc7d34a33d/lib/papi/aws.rb:6
   (root) at /Users/kshipley/.rvm/gems/jruby-1.6.2@split/bundler/gems/papi-38fc7d34a33d/lib/papi/aws.rb:5
  require at org/jruby/RubyKernel.java:1038
   (root) at /Users/kshipley/.rvm/gems/jruby-1.6.2@split/bundler/gems/papi-38fc7d34a33d/lib/papi/aws.rb:157
  require at org/jruby/RubyKernel.java:1038
  require at /Users/kshipley/.rvm/gems/jruby-1.6.2@split/bundler/gems/papi-38fc7d34a33d/lib/papi.rb:68
     each at org/jruby/RubyArray.java:1602
  require at /Users/kshipley/.rvm/gems/jruby-1.6.2@global/gems/bundler-1.0.15/lib/bundler/runtime.rb:66
     each at org/jruby/RubyArray.java:1602
  require at /Users/kshipley/.rvm/gems/jruby-1.6.2@global/gems/bundler-1.0.15/lib/bundler/runtime.rb:55
  require at /Users/kshipley/.rvm/gems/jruby-1.6.2@global/gems/bundler-1.0.15/lib/bundler.rb:120
   (root) at /Users/kshipley/work/src/split/config/environment.rb:5
  require at org/jruby/RubyKernel.java:1038
   (root) at /Users/kshipley/work/src/split/config/environment.rb:3
  require at org/jruby/RubyKernel.java:1038
   (root) at /Users/kshipley/work/src/split/test/test_helper.rb:1
     load at org/jruby/RubyKernel.java:1063
 __file__ at /Users/kshipley/.rvm/gems/jruby-1.6.2@split/gems/rake-0.8.7/lib/rake/rake_test_loader.rb:5
     each at org/jruby/RubyArray.java:1602
   (root) at /Users/kshipley/.rvm/gems/jruby-1.6.2@split/gems/rake-0.8.7/lib/rake/rake_test_loader.rb:5
rake aborted!

您知道在运行 rake 时重新启用 ObjectSpace 的正确命令是什么吗?我已经运行了类似的命令

bundle exec jruby -X+O test/functional/my_test.rb
bundle exec jruby -X+O -S irb

没有问题,所以它似乎与 rake 有某种特定的关系。

【问题讨论】:

  • bundle exec jruby -X+O -S rake 呢?
  • 抱歉,我同时编辑了您的评论——那是我实际运行的命令。

标签: rake jruby


【解决方案1】:

您的 rake 任务是否产生子进程?如果是这样,JRuby 可能正在重用当前的 JVM 进程。尝试导出JRUBY_OPTS='-X+O -J-Djruby.launch.inproc=false'

【讨论】:

  • 这确实解决了我的问题,但是我的测试执行时间从 ree 下的真实 0m14.867s 用户 0m6.484s sys 0m1.269s 到 jruby 下的真实 0m56.332s 用户 1m11.491s sys 0m5.107s -1.6.2。您有什么调优建议,还是我应该考虑隔离目前需要运行 jruby 的一段代码?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-08
  • 1970-01-01
  • 2012-11-18
  • 2019-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多