25%OFF no 1º ano | 50%OFF No 2º ano

Últimos dias!

Últimos dias!

00

DIAS

00

HORAS

00

MIN

00

SEG

Instalando sua aplicação Ruby no cloud do Google (GAE)

Instalando sua aplicação Ruby no cloud do Google (GAE)
david.paniz
david.paniz

Compartilhe

É cada vez mais comum ouvirmos sobre instalação de nossas aplicações em um servidor nas nuvens. Boa parte da comunidade Ruby já está acostumada a utilizar o Amazon EC2 através do Heroku, mas pouco se fala sobre a instalação de nossos aplicações no cloud do Google, o Google App Engine (GAE).

Embora o GAE não tenha uma opção oficial para instalarmos aplicações escritas em ruby, podemos roda-las em cima de uma instalação Java através do interpretador JRuby. Infelizmente, devido à versão modificada de java que é utilizado, o JRuby padrão também não funciona perfeitamente, mas já existe o projeto appengine-jruby que nos provê o runtime tanto para produção que vai funcionar no GAE quanto para desenvolvimento permitindo simular o ambiente do Google nas nossas máquinas. Para instalar o appengine-jruby basta instalar a gem 'google-appengine', mas tome cuidado pois curiosamente para instalar a gem temos que utilizar o ruby "comum" (interpretador MRI) e não o JRuby como pode-se imaginar.

Agora que já estamos com a ambiente configurado para rodar nosso código ruby, chegamos ao momento de escolher nossos frameworks. O appengine-jruby dá suporte total do rack para o GAE, então teoricamente qualquer framework ruby que utilize o rack como o Ruby on Rails ou o Sinatra deveria funcionar, mas infelizmente devido a outras limitações do GAE isso nem sempre é verdade, como é o caso do Rails 3 que ainda não está 100% compatível, mas em desenvolvimento. Por isso vamos fazer um exemplo utilizando o Rails 2.3.9.

Outro desafio que temos para fazer o nosso deploy é a camada de persistência pois o Google disponibiliza apenas o BigTable, um banco de dados não relacional orientado a coluna. Por isso não conseguimos usar o ActiveRecord, o ORM padrão utilizado pelo Rails. Mas podemos superar este desafio utilizando o DataMapper, outra opção de ORM do mundo Ruby que também é compatível com o Rails. Vamos fazer um pouco do famoso Blog de 15 minutos e rodando no GAE:

Instalando gems

gem install google-appengine gem install rails -v "2.3.9" gem install rails_dm_datastore gem install activerecord-nulldb-adapter

Banner da Black Friday da Alura com destaque para até 50% de desconto em cursos, válido até 26/11. Transforme a sua carreira com o maior desconto do ano, matricule-se já!

Criando o projeto

Por ser uma estrutura de projeto um pouco diferente do que o padrão do rails, além do tradicional 'rails projeto' temos que executar um script de setup criado pelos mantenedores do appengine-jruby. rails blog cd blog curl -O http://appengine-jruby.googlecode.com/hg/demos/rails2/rails239_appengine.rb ruby rails239_appengine.rb

Rodando os geradores

Vamos usar o gerador 'scaffold', assim como no exemplo famoso, mas dessa vez passando o parâmetro --skip-migration para não criar a migration, lembrando que não vamos usar um banco de dados relacional. E para completar todas as camadas rodamos o gerador do DataMapper depois. ./script/generate scaffold post titulo:string corpo:text --skip-migration ./script/generate dd_model post titulo:string corpo:text -f

Após essas execuções você deve ter o arquivo app/models/post.rb como esse: ```ruby class Post include DataMapper::Resource

storage_names```:default = "Post" property :id, Serial property :titulo, String, :required => true, :length => 500 property :corpo, Text, :required => true, :lazy => false timestamps :at end


O último passo antes de testarmos a aplicação é adicionar o método **`to_param`** ao nosso modelo. ```ruby
 class Post include DataMapper::Resource #Mesmo código do anterior. Apenas adicionar o método abaixo def to\_param @id.to\_s end end 

Testando em desenvolvimento

Agora que estamos com o código 'pronto' podemos iniciar o servidor para testarmos, lembrando que não é preciso rodar migrations porque estamos usando o BigTable, basta executar: ./script/server.sh

Colocando em produção

O primeiro passo é acessar https://appengine.google.com/, entrar com seu usuário e criar uma aplicação nova lá. Feito isso, você precisa pegar o nome da aplicação e substituir na primeira linha do arquivo WEB-INF/app.yml. No nosso exemplo a aplicação criada se chama jrubyblog.

 application: jrubyblog version: 1 runtime: jruby #... continuação do arquivo 

Após a configuração, para efetivamente instalar a aplicação em produção temos que executar o comando: ./script/publish.sh # Durante a instalação ele pedirá seu email e senha

Agora sua aplicação Ruby on Rails já está instalada no GAE. Para acessá-la você precisa descobrir a URL. Será algo como http://1.latest.NOME_DA_APLICACÃO.appspot.com/. Para descobrir a url da sua aplicação volte em https://appengine.google.com/, clique na sua aplicação e entre no link 'Versions' onde terá os links das versões que você já instalou.

Para testar o código que fizemos neste post você pode acessar: http://1.latest.jrubyblog.appspot.com/posts

UPDATE: 19/04/2011 Atualizamos a maneira de criar o projeto que agora precisa ser um projeto rails, deferente da versão antiga que exigia que fosse um diretório vazio.

Veja outros artigos sobre Inovação & Gestão