Current state of various applications
This document summarizes the state of various applications running under MagLev. In general, many non C-extension based RubyGems work with MagLev. C-Extension support was added to MagLev in March 2011, and some C-extension based gems seem to work out of the box (e.g., rdiscount), while others do not (racc), and others work with modifications (nokogiri).
MagLev comes with RubyGems and Bundler pre-installed. This table summarizes the state of selected gems. If there is an asterisk by a name, that means the gem is discussed more fully below:
| Gem | Version | Status | |-----------+---------+---------------------| | bundler | ~> 1.0 | Works | | minitest | ~> 2.0 | Works | | nokogiri* | ~> 1.5 | Works with patches | | rack | ~> 1.2 | Works | | rails* | ~> 3.1 | Works with patch | | rake | ~> 0.8 | Works | | sinatra* | ~> 1.1 | Works with caveat |
Nokogiri is a C-extension based gem. The MagLev team maintains a fork of Nokogiri at git://github.com/MagLev/nokogiri.git .
There are a couple of places in the Nokogiri code that use a feature not currently supported by the MagLev C-extension implementation. Many of the tests pass, but some fail with an error message:
ArgumentError: rb_data_object_alloc, non-NULL dmark not supported yet
The rubygems that is bundled in MagLev has been configured to download a MagLev specific version of the gem. This will work with the gem commands and bundler. If you install the gem differently, use “nokogiri-maglev-” from Rubygems.org, or install from source.
Source install Nokogiri
Some of the tools needed to build the Nokogiri gem (racc) do not currently work under MagLev, so the gem must be built using MRI. To build the Nokogiri gem:
$ git clone git://github.com/MagLev/nokogiri.git $ cd nokogiri
Make sure you use MRI ruby for the following:
$ gem install hoe rake-compiler racc rexical minitest $ rake
At this point, you should have a gem packaged in pkg/nokogiri-1.5.0.beta.4.gem. Install that gem using MagLev:
$ maglev-gem install pkg/nokogiri-1.5.0.beta.4.gem Building native extensions. This could take a while... Successfully installed nokogiri-1.5.0.beta.4 1 gem installed
Rails works, but we currently apply a workaround to the MagLev image during bootstrap, see src/kernel/workarounds/tzinfo.rb
Sinatra basically works, with one caveat: You may need to add “set :run, true” in your sinatra_app.rb file to start it. See examples/sinatra/README.rdoc for details.