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 Escola de Inovação e Gestão: Matricula-se na escola de Inovação e Gestão. Junte-se a uma comunidade de mais de 500 mil estudantes. Na Alura você tem acesso a todos os cursos em uma única assinatura; tem novos lançamentos a cada semana; desafios práticos. Clique e saiba mais!

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