Help setting up environment on Mono 2.10.2 OS X 10.7

Goal: Equip my C# project with a sane, useful IronRuby testing
environment
that is consistent across OS X and Windows. To that end, I hope to use
RVM,
Bundler (with binstubs), Rake, RR, and RSpec.

Background:
Per Redirecting…
“Starting with Mono 2.10, we are bundling the open source F# compilers
and
tools, and the IronRuby http://ironruby.net/ and
IronPythonhttp://ironpython.net/ systems
in our Linux packages as well as in our Mac installer.”
So, my /Library/Frameworks/Mono.framework/Versions/2.10.2/lib/ironruby/
contains: bin with all /compiled/ IronRuby assemblies and configs (not
including important stuff like gem, etc.), and Lib with a regular ol
Ruby
standard library with IronRuby goodies mixed in.

Problems:

  • RVM doesn’t support IronRuby at all, and all patches or forks that I
    found
    have gone stale.
  • requirement.rb patch is necessary to even begin using rubygems:
    Require 'rubygems' gives llformed requirement [">= 0"] (ArgumentError) - IronRuby - Ruby-Forum
  • Mono’s IronRuby distribution doesn’t include gem/igem, so I ganked it
    from
    the Github repo @v1.1.3, but executing something like “ir
    IronLanguages/Languages/Ruby/Scripts/bin/gem install bundler
    –backtrace”
    produces this output:
    ERROR: Loading command: install (IndexError)
    Array index is out of range.
    mscorlib:0:in GetChars' mscorlib:0:in GetChars’
    mscorlib:0:in GetChars' mscorlib:0:in ReadBuffer’
    mscorlib:0:in Read' /Library/Frameworks/Mono.framework/Versions/2.10.2/lib/ironruby/bin/../Lib/ruby/1.9.1/rubygems/custom_require.rb:28:in require’
    mscorlib:0:in require' mscorlib:0:in CallSite.Target’
    /Library/Frameworks/Mono.framework/Versions/2.10.2/lib/ironruby/bin/…/Lib/ruby/1.9.1/rubygems/custom_require.rb:28:in
    require' /Library/Frameworks/Mono.framework/Versions/2.10.2/lib/ironruby/bin/../Lib/ruby/1.9.1/rubygems/custom_require.rb:28:in require’
    /Library/Frameworks/Mono.framework/Versions/2.10.2/lib/ironruby/bin/…/Lib/ruby/1.9.1/rubygems/custom_require.rb:28:in
    require' /Library/Frameworks/Mono.framework/Versions/2.10.2/lib/ironruby/bin/../Lib/ruby/1.9.1/rubygems/custom_require.rb:28:in require’
    /Library/Frameworks/Mono.framework/Versions/2.10.2/lib/ironruby/bin/…/Lib/ruby/1.9.1/rubygems/custom_require.rb:28:in
    require' /Library/Frameworks/Mono.framework/Versions/2.10.2/lib/ironruby/bin/../Lib/ruby/1.9.1/rubygems/custom_require.rb:28:in require’
    /Library/Frameworks/Mono.framework/Versions/2.10.2/lib/ironruby/bin/…/Lib/ruby/1.9.1/rubygems/custom_require.rb:28:in
    require' /Library/Frameworks/Mono.framework/Versions/2.10.2/lib/ironruby/bin/../Lib/ruby/1.9.1/rubygems/custom_require.rb:28:in require’
    /Library/Frameworks/Mono.framework/Versions/2.10.2/lib/ironruby/bin/…/Lib/ruby/1.9.1/rubygems/custom_require.rb:28:in
    require' mscorlib:0:in require’
    mscorlib:0:in invoke_object__this___Func5<CallSite, RubyScope, object,
    object, object>_CallSite_RubyScope_object_object’
    /Library/Frameworks/Mono.framework/Versions/2.10.2/lib/ironruby/bin/…/Lib/ruby/1.9.1/rubygems/custom_require.rb:28:in
    require' ERROR: While executing gem ... (NameError) uninitialized constant Gem::Commands::InstallCommand /Library/Frameworks/Mono.framework/Versions/2.10.2/lib/ironruby/bin/../Lib/ruby/1.9.1/rubygems/command_manager.rb:164:in const_missing’
    /Library/Frameworks/Mono.framework/Versions/2.10.2/lib/ironruby/bin/…/Lib/ruby/1.9.1/rubygems/command_manager.rb:164:in
    load_and_instantiate' /Library/Frameworks/Mono.framework/Versions/2.10.2/lib/ironruby/bin/../Lib/ruby/1.9.1/rubygems/command_manager.rb:90:in []’
    /Library/Frameworks/Mono.framework/Versions/2.10.2/lib/ironruby/bin/…/Lib/ruby/1.9.1/rubygems/command_manager.rb:146:in
    find_command' /Library/Frameworks/Mono.framework/Versions/2.10.2/lib/ironruby/bin/../Lib/ruby/1.9.1/rubygems/command_manager.rb:133:in process_args’
    /Library/Frameworks/Mono.framework/Versions/2.10.2/lib/ironruby/bin/…/Lib/ruby/1.9.1/rubygems/command_manager.rb:104:in
    `run’
  • Using standard Ruby, I can “gem install bundler
    –install-dir
    /Library/Frameworks/Mono.framework/Versions/2.10.2/lib/ironruby/Lib/ruby/gems/1.9.1”
    and
    “bundle install --binstubs”, but then running ir bin/rspec
    spec/pong_spec.rb
    produces:
    mscorlib:0:in invoke_object__this___Func4<object, Proc, object,
    object>_object_Proc_object’: undefined method realpath' for File:Class (NoMethodError) from /Library/Frameworks/Mono.framework/Versions/2.10.2/lib/ironruby/bin/../Lib/ruby/1.9.1/pathname.rb:446:in realpath’

I can get around this by editing the binstubs to just use FILE
instead
of Pathname.new(FILE).realpath, which gives me:

$
GEM_PATH=/Library/Frameworks/Mono.framework/Versions/2.10.2/lib/ironruby/Lib/ruby/gems/1.9.1
ir bin/rspec spec/pong_spec.rb
mscorlib:0:in invoke_object__this___Func4<object, Proc, object,
object>_object_Proc_object’: can’t convert Pathname into String
(TypeError)
from
/Library/Frameworks/Mono.framework/Versions/2.10.2/lib/ironruby/Lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/settings.rb:5:in
initialize' from /Library/Frameworks/Mono.framework/Versions/2.10.2/lib/ironruby/Lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler.rb:185:in settings’
from
/Library/Frameworks/Mono.framework/Versions/2.10.2/lib/ironruby/Lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler.rb:261:in
configure_gem_home_and_path' from mscorlib:0:in invoke_object__this___Func4<object, Proc, object, object>_object_Proc_object' from /Library/Frameworks/Mono.framework/Versions/2.10.2/lib/ironruby/Lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler.rb:82:in configure’
from
/Library/Frameworks/Mono.framework/Versions/2.10.2/lib/ironruby/Lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler.rb:136:in
definition' from mscorlib:0:in invoke_object__this___Func4<object, Proc, object, object>_object_Proc_object' from /Library/Frameworks/Mono.framework/Versions/2.10.2/lib/ironruby/Lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler.rb:126:in load’
from
/Library/Frameworks/Mono.framework/Versions/2.10.2/lib/ironruby/Lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler.rb:110:in
setup' from /Library/Frameworks/Mono.framework/Versions/2.10.2/lib/ironruby/bin/../Lib/ruby/1.9.1/rubygems/custom_require.rb:28:in require’
from
/Library/Frameworks/Mono.framework/Versions/2.10.2/lib/ironruby/bin/…/Lib/ruby/1.9.1/rubygems/custom_require.rb:28:in
`require’
from
/Library/Frameworks/Mono.framework/Versions/2.10.2/lib/ironruby/Lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/setup.rb:17

Current workarounds:
Steal gem from IronLanguages, patch requirement.rb, don’t use RVM, don’t
use
Bundler, use standard Ruby to install gems to IronRuby’s gems dir.

Plea for help:
The lack of RVM+Bundler support and all the manual mucking around is
definitely sub-optimal; is anyone working on this problem, or does
anyone
have suggestions on where to start trying to fix it? I really want to
show
my OS X Ruby brethren all the cool stuff that’s possible with IronRuby,
but
there’s no way I can make them go through this.