Skip to main content

TOTD #11: Setup Mongrel cluster for JRuby-on-Rails applications on Unix

Posted by arungupta on October 10, 2007 at 11:08 PM PDT

explains the steps to setup a Mongrel
cluster for JRuby-on-Rails applications
on a Unix flavor operating system. These instructions do NOT work on Windows. A
similar post for Windows is cooking and will be posted when ready.

  1. Download
    JRuby 1.0.1
    and unzip the bundle (say JRUBY_HOME).

    1. For convenience, include JRUBY_HOME/bin to
      your PATH.

  2. Install the required RubyGems

    1. Install Rails as shown below:

      jruby -S gem install rails --version 1.2.3 --include-dependencies 
      --no-ri --no-rdoc

      Bulk updating Gem source index for:

      Successfully installed rails-1.2.3

      Successfully installed activesupport-1.4.2

      Successfully installed activerecord-1.15.3

      Successfully installed actionpack-1.13.3

      Successfully installed actionmailer-1.3.3

      Successfully installed actionwebservice-1.2.3
    2. Before installing Mongrel, install the pre-requisite
      Gems as shown below (see discussion

      jruby -S gem install gem_plugin --no-ri --no-rdoc

      Successfully installed gem_plugin-0.2.2

      and another one:

      jruby -S gem install cgi_multipart_eof_fix --no-ri --no-rdoc

      Successfully installed cgi_multipart_eof_fix-2.3
    3. Mongrel cannot be installed as a gem on JRuby yet. So

      download Mongrel gem
      and install it as shown below:

      jruby -S gem install mongrel-1.0.1-jruby.gem --no-ri --no-rdoc

      Successfully installed mongrel, version 1.0.1

      Make sure to invoke the command from the directory where the gem is
    4. Install Mongrel cluster. mongrel_cluster

      does not work with JRuby
      and so instead

      needs to be installed as shown below:

      jruby -S gem install mongrel_jcluster --include-dependencies --no-ri 

      Successfully installed mongrel_jcluster-0.0.1

      As mentioned

      , mongrel_jcluster is still quite experimental and
      not guaranteed to work in any way but it worked for this post :)
  3. Create a template application say in JRUBY_HOME/samples as
    shown below:

    /home/arung/testbed/jruby-1.0.1/samples/rails 1954 $ ../../bin/jruby 
    -S rails hello


          create  app/controllers

          create  app/helpers

          create  app/models


          create  log/production.log

          create  log/development.log

          create  log/test.log
  4. Start Mongrel as shown below:

    cd hello

    /home/arung/testbed/jruby-1.0.1/samples/rails/hello $ ../../../bin/jruby

    => Booting Mongrel (use 'script/server webrick' to force WEBrick)

    => Rails application starting on

    => Call with -d to detach

    => Ctrl-C to shutdown server

    ** Ruby version is not up-to-date; loading cgi_multipart_eof_fix

    ** Starting Mongrel listening at

    ** Starting Rails with development environment...

    ** Rails loaded.

    ** Loading any Rails specific GemPlugins

    ** Signals ready.  TERM => stop.  USR2 => restart.  INT =>
    stop (no restart).

    ** Rails signals registered.  HUP => reload (without restart).  It
    might not work well.

    ** Mongrel available at

    ** Use CTRL-C to stop.

    The application is now available at http://localhost:3000. Hit
    Ctrl-C to stop Mongrel as shown below:

    ^C** INT signal received.



    `require': Mongrel::StopServer (Mongrel::StopServer)

            from /home/arung/testbed/jruby-1.0.1/lib/ruby/gems/1.8/gems/rails-1.2.3/lib/commands/server.rb:39

            from /home/arung/testbed/jruby-1.0.1/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in


            from /home/arung/testbed/jruby-1.0.1/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in


            from :1
  5. Configure and Start Mongrel cluster

    1. Configure Mongrel cluster as shown below:

      /home/arung/testbed/jruby-1.0.1/samples/rails/hello $ 
      ../../../bin/jruby -S mongrel_rails jcluster::configure -p 8000 -N 2

      Writing configuration file to config/mongrel_cluster.yml.

      This starts a cluster of 2 Mongrels (identified by -N 2)
      assigning ports in the ascending order starting at 8000 (identified by
      -p 8000).
    2. Start Mongrel cluster as shown below:

      /home/arung/testbed/jruby-1.0.1/samples/rails/hello $ 
      ../../../bin/jruby -S mongrel_rails jcluster::start

      ** Ruby version is not up-to-date; loading cgi_multipart_eof_fix

      Starting JRuby server...

      Starting 2 Mongrel servers...
  6. Now your application is available on

    and http://localhost:8001. All the
    logs (for all the instances) are available in log/development.log.
  7. The cluster can be stopped as shown below:

    /home/arung/testbed/jruby-1.0.1/samples/rails/hello $ ../../../bin/jruby -S 
    mongrel_rails jcluster::stop

    ** Ruby version is not up-to-date; loading cgi_multipart_eof_fix

    Stopping 2 Mongrel servers...

A follow up post will show how to front-end this cluster of
Mongrels with a light-weight HTTP server.

An alternative to this behemoth configuration is to create a Web
ARchive (WAR) of your JRuby-on-Rails application and deploy on
GlassFish. A complete screencast of how
this can be achieved using NetBeans IDE is
. A comprehensive list of JRuby on GlassFish documentation is
available here.

netbeans ruby

Related Topics >>