For the last couple of weeks, I've got my hands dirty with JRuby. With the main goal of making Rails test suite green(er) on JRuby I used it as an opportunity to dive into JRuby internals.
$ chruby jruby-9.1.6.0
$ cd ~/Projects/opensource/rails
$ jruby -S bundle install
$ cd activemodel
# running all activemodel tests
$ jruby -S bundle exec rake test
# running single test file
$ jruby -S bundle exec ruby -Itest test/cases/failing_test.rb
# running single test case
$ jruby -S bundle exec ruby -Itest test/cases/failing_test.rb -n test_spefici_failing
The process of developing Rails on JRuby was pretty easy, until I got into a situation when I fixed a couple on bugs in JRuby master and I wanted to run tests against my own build of JRuby.
Assuming my build of JRuby master is located in ~/Projects/opensource/jruby/bin/jruby
$ cd ~/Projects/opensource/rails/activemodel
$ ~/Projects/opensource/jruby/bin/jruby --dev -S bundle exec ruby -v
ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin16]
WTF? It looks like bundle exec
doesn't respect the JRuby environment.
At the same time, we should remember that bundle exec
is just a wrapper around require 'bundler/setup
.
The following command successfully runs decimal_test.rb
from ActiveModel:
$ ~/Projects/opensource/jruby/bin/jruby --dev -rbundler/setup -Itest test/cases/type/decimal_test.rb
# to run complete test suite
$ ~/Projects/opensource/jruby/bin/jruby --dev -rbundler/setup -S rake test
Talking about JRuby internals, I was amazed with how readable they are when compared with MRI C sources. So faw I managed to fix two issues and all of them required to write a bit of Java code. That felt quite easy. I don't imagine how much time I would spend if I had to do the same with C code in MRI.