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.
- Download and unzip JRuby 1.1.5.
- 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 - 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… - 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 - 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.
- 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&nb
sp; 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.
- 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.sockto
development:
adapter: jdbcmysql
encoding: utf8
database: helloworld_development
pool: 5
username: root
password:
socket: /tmp/mysql.sockThe change is highlighted in bold letters.
- 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 - 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
Related posts:- TOTD #70: JRuby and GlassFish Integration Test# 1: JRuby 1.2.0 RC1 + Rails 2.2.x + GlassFish Gem
- JRuby 1.1.3 released – Getting Started with GlassFish
- TOTD #24: Getting Started with Rails 2.0.x in JRuby 1.0.3 and JRuby 1.1RC1
- TOTD #71: JRuby and GlassFish Integration Test #2: JRuby 1.2.0 RC1 + Rails 2.2.x + GlassFish v3 Prelude
- TOTD #76: JRuby 1.2, Rails 2.3, GlassFish Gem 0.9.3, ActiveRecord JDBC Adapter 0.9.1 – can they work together ?
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.
Comment by Nabeel Zafar — November 7, 2008 @ 8:16 am
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?
Comment by Carlos Kozuszko — November 29, 2008 @ 3:11 pm
Carlos,
Check with , somebody on that alias will know the exact state of this bug.
Comment by Arun Gupta — December 5, 2008 @ 5:44 pm
very very cool thanksss
Comment by çiçekçi — January 25, 2009 @ 4:58 am
thank u gupta.
Comment by sinema izle — March 13, 2009 @ 2:03 pm
You have a very nice blog and article. Special thank on u and we hope to get more knowledge in future
http://www.can-bil.com
http://www.online-shopp.net
Comment by Ankara Bilgisayar Satış Teknoloji Mağazası Elektronik Alışveriş — March 15, 2009 @ 2:36 am
thanks..
Comment by kelebek — April 26, 2009 @ 2:33 am
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.
Comment by Robert Hempaz — August 18, 2009 @ 9:15 am
Robert,
Can you please clarify your question ?
Comment by Arun Gupta — August 19, 2009 @ 4:30 pm