Posted by
arungupta on November 4, 2008 at 11:48 AM PST
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 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.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.
- 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