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. ;)