Num artigo escrito em março, o Fabio Akita mostrou como fazer acesso a um banco de dados MS SQL Server por uma aplicação Rails. Apresentaremos nesse artigo uma alternativa mais simples, usando JRuby. Dessa forma, não é necessário configurar ODBC da máquina e a solução é exatamente a mesma, independente da plataforma ser Linux, Windows ou Mac.
Quem nunca trabalhou com Java ou JRuby terá um pouco mais de trabalho para configurar seu ambiente. Estamos supondo que a instalação da JDK já foi feita. Para instalar o JRuby, basta acessar o site do projeto, baixar e descompactar o arquivo em alguma pasta da sua máquina. Na ocasião desse artigo, baixamos a versão 1.3.1 do JRuby. Uma vez que o executável do JRuby esteja instalado na máquina juntamente com a JDK, o jruby deverá também estar incluído no seu PATH. Além disso, você precisa instalar o Driver JDBC para SQLServer no seu JRuby. Para isso, basta baixar o driver. O driver vem dentro de um arquivo .ZIP – o usado por nós foi o da versão 1.2.2. Coloque o arquivo jtds-1.2.2.jar no diretório /lib da sua instalação do JRuby.
A partir daí basta seguir os seguintes passos para criar uma aplicação Rails
- Execute os comandos:
jruby -S gem install rails
jruby -S gem install activerecord-jdbc-adapter
- jruby -S rails testesqlserver
- Edite o arquivo config/database.yml e coloque o seguinte conteúdo no banco de development:
adapter: jdbc
url: jdbc:jtds:sqlserver://seu.servidor.sql.server.com/suabase
driver: net.sourceforge.jtds.jdbc.Driver
username: usuario
password: senha
- Entre no diretório testesqlserver e execute os comandos:
jruby -S script/generate model MyTable name:string
jruby -S rake db:migrate
Se tudo correu bem até aqui, nesse ponto a migration vai criar a tabela my_tables no seu banco de dados. Isso significa que sua conexão já está funcionando. Não fizemos muitos testes de performance para saber se esse tipo de configuração pode ser usado em aplicações críticas, mas algumas funções básicas funcionaram muito bem:
>> (1..10).each do |t|
?> a = MyTable.new
>> a.name = "#{t}"
>> a.save
>> end
=> 1..10
>> MyTable.find(:all)
=> [#<MyTable id: 2, name: nil, created_at: "2009-07-23 18:46:35", updated_at: "2009-07-23 18:46:35">, #<MyTable id: 3, name: "1", created_at: "2009-07-23 18:49:22", updated_at: "2009-07-23 18:49:22">, #<MyTable id: 4, name: "2", created_at: "2009-07-23 18:49:22", updated_at: "2009-07-23 18:49:22">, #<MyTable id: 5, name: "3", created_at: "2009-07-23 18:49:22", updated_at: "2009-07-23 18:49:22">, #<MyTable id: 6, name: "4", created_at: "2009-07-23 18:49:22", updated_at: "2009-07-23 18:49:22">, #<MyTable id: 7, name: "5", created_at: "2009-07-23 18:49:22", updated_at: "2009-07-23 18:49:22">, #<MyTable id: 8, name: "6", created_at: "2009-07-23 18:49:22", updated_at: "2009-07-23 18:49:22">, #<MyTable id: 9, name: "7", created_at: "2009-07-23 18:49:22", updated_at: "2009-07-23 18:49:22">, #<MyTable id: 10, name: "8", created_at: "2009-07-23 18:49:22", updated_at: "2009-07-23 18:49:22">, #<MyTable id: 11, name: "9", created_at: "2009-07-23 18:49:22", updated_at: "2009-07-23 18:49:22">, #<MyTable id: 12, name: "10", created_at: "2009-07-23 18:49:22", updated_at: "2009-07-23 18:49:22">]
>> MyTable.find(:all).each do |m|
?> m.delete
>> end
=> [#<MyTable id: 2, name: nil, created_at: "2009-07-23 18:46:35", updated_at: "2009-07-23 18:46:35">, #<MyTable id: 3, name: "1", created_at: "2009-07-23 18:49:22", updated_at: "2009-07-23 18:49:22">, #<MyTable id: 4, name: "2", created_at: "2009-07-23 18:49:22", updated_at: "2009-07-23 18:49:22">, #<MyTable id: 5, name: "3", created_at: "2009-07-23 18:49:22", updated_at: "2009-07-23 18:49:22">, #<MyTable id: 6, name: "4", created_at: "2009-07-23 18:49:22", updated_at: "2009-07-23 18:49:22">, #<MyTable id: 7, name: "5", created_at: "2009-07-23 18:49:22", updated_at: "2009-07-23 18:49:22">, #<MyTable id: 8, name: "6", created_at: "2009-07-23 18:49:22", updated_at: "2009-07-23 18:49:22">, #<MyTable id: 9, name: "7", created_at: "2009-07-23 18:49:22", updated_at: "2009-07-23 18:49:22">, #<MyTable id: 10, name: "8", created_at: "2009-07-23 18:49:22", updated_at: "2009-07-23 18:49:22">, #<MyTable id: 11, name: "9", created_at: "2009-07-23 18:49:22", updated_at: "2009-07-23 18:49:22">, #<MyTable id: 12, name: "10", created_at: "2009-07-23 18:49:22", updated_at: "2009-07-23 18:49:22">]
>> MyTable.find(:all)
=> []