Wednesday October 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.
Download JRuby 1.0.1 and unzip the bundle (say JRUBY_HOME).
For convenience, include JRUBY_HOME/bin to
your PATH.
Install the required RubyGems
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
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
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.
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-rdocAs mentioned
here,
Successfully installed mongrel_jcluster-0.0.1
mongrel_jcluster is still quite experimental and
not guaranteed to work in any way but it worked for this post :)
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
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
Configure and Start Mongrel cluster
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).
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...
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.
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
Posted by Arun Gupta in web2.0 | Comments[5]
|
|
|
|
|
Today's Page Hits: 2426
Total # blog entries: 999
| « November 2009 | ||||||
| Sun | Mon | Tue | Wed | Thu | Fri | Sat |
|---|---|---|---|---|---|---|
1 | 2 | 4 | 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 | ||||||
Posted by Arun Gupta's Blog on October 12, 2007 at 09:38 AM PDT #
Nice write-up! I think there's a small error in item 5: you need the -S option when you run mongrel_rails with jruby.
Also, the server only starts on port 8000.
Posted by Kjetil on November 23, 2007 at 04:27 AM PST #
Thanks for the catch, fixed the typo!
When the Cluster was configured, then I could see exact same page hosted at port 8000 and 8001. Can you explain your second comment ?
Posted by Arun Gupta on November 23, 2007 at 05:36 AM PST #
I've followed above configurations for jruby mongrel_cluster but I'm getting the below error
jruby -S mongrel_rails jcluster::start
Starting JRuby server...
Starting 2 Mongrel servers...
sh: jrubycli: command not found
mongrel_rails start -e development -p 8000 -P log/mongrel.8000.pid
sh: jrubycli: command not found
mongrel_rails start -e development -p 8001 -P log/mongrel.8001.pid
Posted by sagi on September 18, 2009 at 09:45 PM PDT #
sagi, I've not tried the configuration for sometime now. Please ask your question to user@jruby.codehaus.org.
Thanks,
-Arun
Posted by Arun Gupta on September 22, 2009 at 10:09 PM PDT #