Desenvolvendo com JRuby e Rails 3

A versão final do Rails 3 foi liberada faz pouco tempo e mesmo assim já tenho visto bastante material demonstrando as novidades dessa versão. Mas particularmente não vi muita coisa demonstrando como utilizar o JRuby com essa nova versão do Rails e isso me motivou a escrever esse post.

Antes de começar efetivamente este post, irei recomendar a leitura do post do Fábio Akita sobre RVM, nesse post ele mostra como instalar, configurar e utilizar o RVM. Eu recomendo muito utilizar o RVM, pois ele facilita bastante o gerenciamento e utilização de várias versões do ruby, rails e gems.

Nesse post irei utilizar as seguintes tecnologias:

** OS: Mac OS 10.6.4/Linux Ubuntu 10.04 RVM: 1.0.1 JRuby: 1.5.2 Rails: 3.0.0 MySQL Server: 5.1.45 **

O exemplo completo do post pode ser visto no github: http://github.com/rlazoti/jruby-on-rails-3-example

Agora voltando ao post, vou começar instalando a versão atual do JRuby disponível no RVM que é a jruby-1.5.2, para instalar esta versão basta executar o comando a seguir (depois de ter instalado o RVM):

1
rvm install jruby

Agora vou definir o JRuby como a versão Ruby corrente no RVM através do comando:

1
rvm use jruby

Feito isso já posso instalar as gems necessárias para desenvolver com o Rails 3, inicialmente vou instalar apenas o Rails, pois as outras gem serão definidas na própria aplicação e instaladas pelo Bundler:

1
gem install rails

Com o MySQL, RVM, JRuby e Rails instalados já tenho um ambiente pronto para iniciar o desenvolvimento da aplicação.

A aplicação será criada quase que da mesma forma que uma aplicação em rails 3, onde informarei o nome da aplicação, qual o banco de dados ela usará e um parâmetro adicional que define o template para criar a aplicação (repare que esse template serve para definir a base da aplicação como JRuby já baseado na versão 3 do framework Rails).

1
rails new contacts -d mysql -m http://jruby.org/rails3.rb

Com o comando executado com sucesso, o passo seguinte é definir as gems que a aplicação precisa para ser executada, a definição das gem é feita no arquivo Gemfile.

1
2
cd contacts
vi Gemfile

O conteúdo do arquivo Gemfile já com as gems necessárias para a aplicação é o seguinte:

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
31
32
33
34
35
36
37
38
source 'http://rubygems.org'

gem 'rails', '3.0.0'

# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'

if defined?(JRUBY_VERSION)
  gem 'activerecord-jdbc-adapter'
  gem 'activerecord-jdbcmysql-adapter'
  gem 'jdbc-mysql'
  gem 'jruby-openssl'
  gem 'trinidad'
else
  gem 'mysql2'
end

# Use unicorn as the web server
# gem 'unicorn'

# Deploy with Capistrano
# gem 'capistrano'

# To use debugger
# gem 'ruby-debug'

# Bundle the extra gems:
# gem 'bj'
# gem 'nokogiri'
# gem 'sqlite3-ruby', :require => 'sqlite3'
# gem 'aws-s3', :require => 'aws/s3'

# Bundle gems for the local environment. Make sure to
# put test-only gems in this group so their generators
# and rake tasks are available in development mode:
# group :development, :test do
#   gem 'webrat'
# end

A gem Trinidad serve para rodar a aplicação em uma versão embedded do Apache Tomcat, existe também a possibilidade de usar a gem Warbler que serve para empacotar a aplicação em um arquivo WAR para que posteriormente o deploy seja feito em um web container ou application server java. As outras gem são necessárias para conexão JDBC com o MySQL.

Repare também que o arquivo Gemfile utiliza a variável de ambiente JRUBY_VERSION mas essa variável não é definida pelo RVM, então para que esse arquivo funcione de forma correta é necessário definí-la.

O RVM configura uma variável de ambiente chamada RUBY_VERSION, com isso fica fácil definir a variável que preciso conforme o comando a seguir:

1
JRUBY_VERSION=$RUBY_VERSION

Ok, as gems foram definidas na aplicação mas ainda não foram instaladas. Esta tarefa é feita pelo Bundler utilizando o comando:

1
bundle install

O arquivo config/database.yml contém a configuração com o bando de dados MySQL, e por padrão é definido o usuario root e uma senha vazia. Caso você tenha um usuário ou senha diferente é precisa editar esse arquivo.

Embora o uso de scaffold não seja recomendado, irei utilizá-lo para encurtar o post. O passo seguinte é criar o banco de dados, criar um scaffold para contact e gerar a tabela no MySQL conforme comandos abaixo:

1
2
3
rake db:create
rails g scaffold contact name:string email:string birthdate:date bio:text
rake db:migrate

Pronto! :D A aplicação já pode ser executada e para isso vou usar a gem Trinidad e subir um Tomcat já com a aplicação inclusa.

1
trinidad

Para acessar a aplicação basta abrir a url http://localhost:3000/contacts no browser.

Com isso finalizo esse post que demonstra como utilizar JRuby com Rails 3. ;)


comments powered by Disqus