Getting Started with Edge Rails (2.2) using JRuby and GlassFish


This blog shows how to get started with Edge Rails (2.2, almost there) using JRuby. The blog uses JRuby 1.1.5 and GlassFish v3 Prelude b28c to deploy a simple Rails app.
  1. Download and unzip JRuby 1.1.5.
  2. JRuby 1.1.5 comes with "rake 0.8.3". However if you are using JRuby 1.1.4, then you need to update "rake" version to 0.8.3 as:

    ~/tools/jruby-1.1.4 >bin/jruby -S gem update rake
    JRuby limited openssl loaded. gem install jruby-openssl for full support.
    http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL
    Updating installed gems
    Updating rake
    Successfully installed rake-0.8.3
    Gems updated: rake
  3. Install Edge Rails as:

    ~/tools/jruby-1.1.5 >bin/jruby -S gem install rails -s http://gems.rubyonrails.org -v 2.2.0
    JRuby limited openssl loaded. gem install jruby-openssl for full support.
    http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL
    Successfully installed activesupport-2.2.0
    Successfully installed activerecord-2.2.0
    Successfully installed actionpack-2.2.0
    Successfully installed actionmailer-2.2.0
    Successfully installed activeresource-2.2.0
    Successfully installed rails-2.2.0
    6 gems installed
    Installing ri documentation for activesupport-2.2.0...
    Installing ri documentation for activerecord-2.2.0...
    Installing ri documentation for actionpack-2.2.0...
    Installing ri documentation for actionmailer-2.2.0...
    Installing ri documentation for activeresource-2.2.0...
    Installing RDoc documentation for activesupport-2.2.0...
    Installing RDoc documentation for activerecord-2.2.0...
    Installing RDoc documentation for actionpack-2.2.0...
    Installing RDoc documentation for actionmailer-2.2.0...
    Installing RDoc documentation for activeresource-2.2.0...
  4. Create a new app as:

    ~/samples/jruby/edge >~/tools/jruby-1.1.5/bin/jruby -S rails helloworld -d mysql
    JRuby limited openssl loaded. gem install jruby-openssl for full support.
    http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL
          create  
          create  app/controllers
          create  app/helpers
    . . .
          create  log/server.log
          create  log/production.log
          create  log/development.log
          create  log/test.log
  5. Edge Rails do not ship with any(?, atleast MySQL) pure-Ruby database drivers and throws the following error if a database related operation is performed:

    ~/samples/jruby/helloworld >~/tools/jruby-1.1.5/bin/jruby -S rake db:create
    (in /Users/arungupta/samples/jruby/helloworld)
    !!! The bundled mysql.rb driver has been removed from Rails 2.2. Please install the mysql gem and try again: gem install mysql.
    rake aborted!
    no such file to load -- mysql

    (See full trace by running task with --trace)

    I find it weird that a database-backed framework does not ship database drivers. Anyway, lets install MySQL JDBC ActiveRecord adapter as:

    ~/tools/jruby-1.1.5 >bin/jruby -S gem install activerecord-jdbcmysql-adapter
    JRuby limited openssl loaded. gem install jruby-openssl for full support.
    http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL
    Successfully installed activerecord-jdbc-adapter-0.8.2
    Successfully installed jdbc-mysql-5.0.4
    Successfully installed activerecord-jdbcmysql-adapter-0.8.2
    3 gems installed
    Installing ri documentation for activerecord-jdbc-adapter-0.8.2...
    Installing ri documentation for jdbc-mysql-5.0.4...
    Installing ri documentation for activerecord-jdbcmysql-adapter-0.8.2...
    Installing RDoc documentation for activerecord-jdbc-adapter-0.8.2...
    Installing RDoc documentation for jdbc-mysql-5.0.4...
    Installing RDoc documentation for activerecord-jdbcmysql-adapter-0.8.2...

    More details on configuring this adapter here.
  6. Create a simple scaffold:

    ~/samples/jruby/edge/helloworld >~/tools/jruby-1.1.5/bin/jruby script/generate scaffold runner distance:float time:integer
    JRuby limited openssl loaded. gem install jruby-openssl for full support.
    http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL
          exists  app/models/
          exists  app/controllers/
          exists  app/helpers/
          create  app/views/runners
          exists  app/views/layouts/
          exists  test/functional/
          exists  test/unit/
          exists  public/stylesheets/
          create  app/views/runners/index.html.erb
          create  app/views/runners/show.html.erb
          create  app/views/runners/new.html.erb
          create  app/views/runners/edit.html.erb
          create  app/views/layouts/runners.html.erb
          create  public/stylesheets/scaffold.css
          create  app/controllers/runners_controller.rb
          create  test/functional/runners_controller_test.rb
          create  app/helpers/runners_helper.rb
           route  map.resources :runners
      dependency  model
          exists    app/models/
          exists    test/unit/
          exists    test/fixtures/
          create    app/models/runner.rb
          create    test/unit/runner_test.rb
          create    test/fixtures/runners.yml
          create    db/migrate
          create    db/migrate/20081103190813_create_runners.rb
    ~/samples/jruby/edge/helloworld >~/tools/jruby-1.1.5/bin/jruby -S rake db:create
    (in /Users/arungupta/samples/jruby/edge/helloworld)
    ~/samples/jruby/edge/helloworld >~/tools/edge/jruby-1.1.5/bin/jruby -S rake db:migrate
    (in /Users/arungupta/samples/jruby/edge/helloworld)
    ==  CreateRunners: migrating ==================================================
    -- create_table(:runners)
       -> 0.0068s
       -> 0 rows
    ==  CreateRunners: migrated (0.0077s) =========================================

    Some words here.
  7. Change "config/database.yml" to use the JDBC adapter. Change:

    development:
      adapter: mysql
      encoding: utf8
      database: helloworld_development
      pool: 5
      username: root
      password:
      socket: /tmp/mysql.sock

    to

    development:
      adapter: jdbcmysql
      encoding: utf8
      database: helloworld_development
      pool: 5
      username: root
      password:
      socket: /tmp/mysql.sock

    The change is highlighted in bold letters.
  8. Download GlassFish v3 Prelude 28c, unzip and start it as:

    ~/tools/glassfish/v3/28c/glassfishv3-prelude/glassfish >java -Xmx512m -DJRUBY_HOME=/Users/arungupta/tools/jruby-1.1.5/ -jar modules/glassfish.jar 
  9. Finally deploy the application as:

    ~/samples/jruby/edge >~/tools/glassfish/v3/28c/glassfishv3-prelude/glassfish/bin/asadmin deploy helloworld

    Command deploy executed successfully.
And now the scaffold is accessible at "http://localhost:8080/helloworld/runners".

This application does not show any of the cool features (thread-safe, i18n, pooled datbase connections, ...) coming up in Rails 2.2. But at least it clearly explains how to get started if you want to develop and run a Rails 2.2 application using JRuby.

Subsequent blogs will provide more information about performance advantages, multi threading, connection pooling and other benefits offered by GlassFish for Rails applications.

Technorati: rubyonrails glassfish v3 jruby
Comments:

I've noticed there's a "glassfish" gem out there now. What is its exact purpose? I have seen people do "gem_rails myApp" but haven't had success with this using the latest jruby and rails 2.2.0. I have glassfishv3- prelude now installed and can deploy to it using your instructions but not sure if the gem can speed up the process? Thanks.

Posted by Nabeel Zafar on November 07, 2008 at 12:16 AM PST #

Thanks for this simple guide Arun!

But there still seems to an issue with drive letters in jruby on windows.

This bug report claims to have fixed the issue, but the code on trunk doesn't seem to have the patch applied.
http://jira.codehaus.org/browse/JRUBY-1401

Could I be doing something wrong?

Posted by Carlos Kozuszko on November 29, 2008 at 07:11 AM PST #

Carlos,

Check with user@jruby.codehaus.org, somebody on that alias will know the exact state of this bug.

Posted by Arun Gupta on December 05, 2008 at 09:44 AM PST #

very very cool thanksss

Posted by çiçekçi on January 24, 2009 at 08:58 PM PST #

thank u gupta.

Posted by sinema izle on March 13, 2009 at 07:03 AM PDT #

You have a very nice blog and article. Special thank on u and we hope to get more knowledge in future

www.can-bil.com
www.online-shopp.net

Posted by Ankara Bilgisayar Satış Teknoloji Mağazası Elektronik Alışveriş on March 14, 2009 at 07:36 PM PDT #

thanks..

Posted by kelebek on April 25, 2009 at 07:33 PM PDT #

Arun: I am apprehensive of invoking 'jdbcmysql' aka 'The JDBC adapter' by removing 'mysql' from project 'config/database.yml' file. Question: 'Why invoke the line RE: 'socket: /tmp/mysql.sock' in your 'config/database.yml' configuration as shown? See: MySQL_forum_ruby <a href="http://forums.mysql.com/read.php?116,276785,276785#msg-276785" for a synopsis of my dilemma attempting to 'rake' via Aptana Studio-Rad Rails-MySQL51-Ruby 1.8(26). Perhaps my MySQL 5.1(36) installation requires further invokation. However, a valid connection has been established and verified via Aptana Studio prior to attempting initial 'rake" db:migrate. Pls review. Thank you for your most gifted insight(s). Robert.

Posted by Robert Hempaz on August 18, 2009 at 02:15 AM PDT #

Robert,

Can you please clarify your question ?

Posted by Arun Gupta on August 19, 2009 at 09:30 AM PDT #

Is it possible to make SSL connections to MySQL using the jdbcmysql adapter? The "sslcert", etc. parameters in database.yml don't seem to work as they do with the normal mysql adapter.

Posted by Timothy Jones on December 02, 2009 at 05:42 AM PST #

When I try to run an app (not your tutorial one from above) I am getting this error:

<script>:1: undefined method `configuration' for Rails:Module (NoMethodError)

Glassfish is starting up, and loading rails, but that seems to be it. My app runs fine using Webrick. I'm running Glassfish Gem 1.0.2, JRuby 1.4.0, Rails 2.3.5, Rack 1.0.1 (had problems with Rack 1.1.0) on windows 7 pro 64 bit. I updated to use the jdbcmysql database adapter as per this article. Any thoughts on the error?

Posted by Charles de Bueger on February 16, 2010 at 05:33 AM PST #

Charles,

Are you able to run a simple Rails app using this configuration ? This will allow to iron out the environment issues.

Some more details are also available at:

http://blog.admoolabs.com/jruby-glassfish-ge/

Posted by Arun Gupta on February 23, 2010 at 08:51 AM PST #

Post a Comment:
Comments are closed for this entry.
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