Thursday Oct 11, 2007

TOTD #13: Setup Mongrel for JRuby-on-Rails applications on Windows

In a previous entry, I posted instructions on how to setup Mongrel cluster for JRuby-on-Rails applications on Unix-based systems. The instructions specified there do not work on Windows-based systems because of the following reasons:

  • JRuby 1.0.1 + (default) Rails Gem (version 1.2.4) does not work on Windows because of JRUBY-1401. An older Rails version (such as 1.2.3) can always be used as described below.
  • JRuby 1.0.1 + (default) Mongrel 1.0.1 does not work on Windows because of JRUBY-1410, JRUBY-1411.

So if you want JRuby-on-Rails applications to deploy on Mongrel on Windows, then the workaround is to checkout the JRuby trunk and use Rails 1.2.3. This blog explains the instructions on how to do that. The Mongrel cluster cannot be configured on JRuby yet though.

As a side note, repeated invocation of "jruby" command will encounter JRUBY-1350. The workaround is to exit out of the current command prompt and execute the commands in a new one.

  1. Check out the workspace and build it using the following commands:

    mkdir jruby-trunk
    cd jruby-trunk
    svn co http://svn.codehaus.org/jruby/trunk/jruby
    ant


    Add jruby-trunk/bin to your PATH.
  2. Install the required RubyGems
    1. Install Rails Gem version 1.2.3 using the command:

      C:\\workspaces\\jruby-trunk\\bin>jruby -J-Xmx384m -S gem install rails --version 1.2.3 --include-dependencies --no-ri --no-rdoc
      Bulk updating Gem source index for: http://gems.rubyforge.org
      Successfully installed rails-1.2.3
      Successfully installed rake-0.7.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 here):

      C:\\workspaces\\jruby-trunk\\bin>jruby -S gem install gem_plugin --no-ri --no-rdoc
      Successfully installed gem_plugin-0.2.2


      and another one:

      C:\\workspaces\\jruby-trunk\\bin>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:

      C:\\workspaces\\jruby-trunk\\bin>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 downloaded.
    4. mongrel_cluster does not work with JRuby and mongrel_jcluster does not work on Windows. So Mongrel clusters cannot be configured on a Windows machine.

  3. Create a new directory jruby-trunk\\samples\\rails and create a new Rails application as shown below:

    C:\\workspaces\\jruby-trunk\\samples\\rails>..\\..\\bin\\jruby -S rails hello
    create
    create app/controllers
    create app/helpers
    create app/models
    ...
    create log/production.log
    create log/development.log
    create log/test.log
  4. Change to the newly created directory and start Mongrel as shown below:

    C:\\workspaces\\jruby-trunk\\samples\\rails\\hello>..\\..\\..\\bin\\jruby script\\server
    => Booting Mongrel (use 'script/server webrick' to force WEBrick)
    => Rails application starting on http://0.0.0.0:3000
    => 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 0.0.0.0:3000
    \*\* 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 0.0.0.0:3000
    \*\* Use CTRL-C to stop.


    The application is now available at http://localhost:3000 and shows the default "Welcome Aboard You're riding the Rails!" page. Hit Ctrl-C to stop Mongrel as shown below:

    \*\* INT signal received.
    Exiting
    C:/workspaces/jruby-trunk/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/dependencies.rb:452:in `const_missing': Mongrel::StopServer (Mongrel::StopServer)
            from C:/workspaces/jruby-trunk/lib/ruby/gems/1.8/gems/mongrel-1.0.1-jruby/lib/mongrel.rb:723:in `run'
            from C:/workspaces/jruby-trunk/lib/ruby/gems/1.8/gems/mongrel-1.0.1-jruby/lib/mongrel/configurator.rb:271:in `initialize'
    Terminate batch job (Y/N)? y

An alternative to this behemoth configuration and lack of Mongrel cluster on Windows 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 shown here. A comprehensive list of JRuby on GlassFish documentation is available here.

Technorati: totd rubyonrails jruby ruby mongrel windows jrubyonglassfish glassfish netbeans

Wednesday Oct 10, 2007

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

This TOTD 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: http://gems.rubyforge.org
      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 here):

      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 downloaded.

    4. Install Mongrel cluster. mongrel_cluster does not work with JRuby and so instead mongrel_jcluster needs to be installed as shown below:

      jruby -S gem install mongrel_jcluster --include-dependencies --no-ri --no-rdoc
      Successfully installed mongrel_jcluster-0.0.1

      As mentioned here, 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
          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 script/server
    => Booting Mongrel (use 'script/server webrick' to force WEBrick)
    => Rails application starting on http://0.0.0.0:3000
    => 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 0.0.0.0:3000
    \*\* 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 0.0.0.0:3000
    \*\* 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.
    Exiting
    /home/arung/testbed/jruby-1.0.1/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/dependencies.rb:498:in
    `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
    `require'
            from /home/arung/testbed/jruby-1.0.1/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
    `require'
            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 http://localhost:8000 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 shown here. A comprehensive list of JRuby on GlassFish documentation is available here.

Technorati: totd rubyonrails jruby mongrel unix jrubyonglassfish glassfish netbeans ruby

About

profile image
Arun Gupta is a technology enthusiast, a passionate runner, author, and a community guy who works for Oracle Corp.


Java EE 7 Samples

Stay Connected

Search

Archives
« April 2014
SunMonTueWedThuFriSat
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
Today