Archive for December, 2009

Deploy de Aplicações Rails na locaweb é com Inploy

Posted in Ruby/Rails on December 20th, 2009 by Edipo L Federle – 7 Comments

Acredito que a parte onde se tem mais problemas para quem está começando à adotar Rails é na hora de realizar o Deploy da aplicação ou “colocar no ar”.

Todos sabemos que existe o Capistrano, sinceramente só o nome dele me assusta, mas não podemos tirar os méritos dessa ferramenta, que por sinal é uma grande contribuição para a comunidade Rails. Capistrano é difícil de ser usado, é difícil de ser configurado e a documentação não é de grande ajuda nessa hora.

Então o Akita como sempre deu um jeito e criou o locarails, uma ótima opção que utiliza o capistrano por baixo dos panos, e faz com quem não saiba nada de Capistrano configure sua aplicação para realizar deploy na locaweb facilmente.

Eu venho utilizando o locarails a um tempo, realmente ele tira toda a responsabilidade de você na hora de configurar o Capistrano. Certamente o locarails me ajudou muito, agradeço muito a ele, agradeço ao Akita pela contribuição para a comunidade.

O locarails inicialmente realiza o Deploy via estratégia copy(também podemos usar com git, eu não consegui), ou seja, à cada “cap deploy” que você realiza ele irá copiar tudo para o servidor novamente, isso pode não ser problema quando não se tem muita coisa para se enviar, mas tratando de algo com um pouco mais tamanho pode se tornar bastante demorado. Outra coisa que o capistrano faz é lhe deixar com uma estrutura de pastas no servidor um tanto desnecessária, em alguns casos, você irá ter current, release , shared, ok, você pode querer voltar para uma versão antiga e  sem os releases não seria possível voltar para o último deploy realizado, pessoalmente eu nunca precisei fazer isso, a única vez que fiz foi para teste :) .

Bom isso foi um pouco do locarails, QUERO DEIXAR CLARO AQUI, que de forma alguma estou dizendo que o locarails é ruim ou algo assim, muito pelo contrario, acho ele ótimo, como disse me ajudou muito já(e ainda ajuda), mas agora tenho uma nova ferramenta que tentarei usar como pardão, e ela é o Inploy…..

Inploy

O Inploy é um plugin criado pelo Diego Carrion que torna o deploy de aplicações Rails ainda mais fácil, rápida e poderosa.

Passei a testar ele a algum tempo mas não tinha sucesso ao usar na locaweb, até que hoje após uma longa conversar com o Diego no GTalk ele me guiou através dos passos, durrante o processor tivemos um erro, Diego acabou achando num método no template para o locaweb a falta de uma linha,(que já foi commitada por ele), apartir dai tudo passou a funcionar perfeitamtne, o deploy está funcinando perfeitamente aqui.

Uma coisa que gostei muito no Inploy é que ele faz o uso do GIT, isso realmente trás grandes benifícios, logo quando queremos atualizar nossa aplicação não será enviada novamente, criando aquela coisa toda de pastas e tudo mais, ele irá somente enviar as mudanças realizadas, isso torna as coisas realmente muito mais rápidas, e isso faz possível tambem voltar para versões antigas, já que estamos utilizando git.

Vou explicar abaixo como fazer o deploy na locaweb usando o Inploy,1 e falar juntamente dos erros e dúvidas que tive durante a configuração.

ATENCAO 0: Você deve tar usando git em seu projeto.

Instalação

A duas formas de se instalar, via plugin ou via gem.

Como plugin dentro da sua aplicação:
script/plugin install git://github.com/dcrec1/inploy.git

como gem:
sudo gem install inploy

Configurando

Partindo que você optou por instalar o plugin, você irá ganhar dentro da pasta conf um arquivo chamado deploy.rb abrindo ele:

Como vamos fazer o deploy na locaweb vamos utilizar a opção de template, nosso arquivo ficará assim:

Bom acho que não tem muito o que falar sobre essas linhas, as linhas que tirei são porque não vamos usar o github, segundo o Diego, a locaweb tem alguns problemas ao usar ele, à ultima linha que removemos é onde a aplicação irá ficar, sem essa linha vai para o pardão da locaweb que é rails_app, caso queira mudar utilize a linha e especifique o local que você deseja.

Muita atenção, isso aconteceu comigo, eu me esqueci de colocar a primeira linha assim:

deploy.template = :locaweb #CERTO

ao invés disso coloquei assim:

deploy.template  :locaweb#ERRADO

ATENÇÃO 1 – Seu projeto deve tar usando git já.

Pronto feito isso você já está pronto para realizar a primeira tarefa. No terminal dentro da pasta da sua aplicação execute o seguinte:

ATENÇÃO 2 – Comando é para ser executado locamente.
rake inploy:remote:setup

Ok configurado, isso deve criar a pasta com a sua aplicação lá no servidor,(na pasta rails_app), também irá rodar todas as terefas necesárias como db:migrate, instalar gems, criar o link simbólico em public_html, e muitas outras tarefas(veja a lista completa no github).

Nesse momento sua aplicação já está no ar.

Atualizando Aplicação

Digamos que agora você realizou uma modificações em sua aplicação e está pronto para enviar para produção, como fazer? Simples, realize o commit necessário, e rode outra tarefa do inploy:

ATENCAO 3 – Novamente locamente.
rake inploy:remote:update

Pronto ele irá subir somente as modificações feitas, e realizar as terefas necesárias como restartar o servidor. Nesse momento sua app está com o código atualizado.

Bom pessoal, somente disse o básico para você fazer o deploy e atualizar o projeto, obviamente o Inploy inclue outras várias opções que devem ser olhadas e testadas com mais calma.

Novamente queria deixar aqui meus agradecimentos ao Diego pela ajuda, e pelo ótima trabalho que fez com o inploy.

É isso, até logo.

Ruby Série #4 – Métodos Parte 1

Posted in Ruby/Rails on December 5th, 2009 by Edipo L Federle – Be the first to comment

Warning: Missing argument 1 for GeSHi::GeSHi(), called in /home/storage/f/73/ab/bitside1/public_html/edipo_blog/blog/wp-content/plugins/codecolorer/codecolorer-core.php on line 137 and defined in /home/storage/f/73/ab/bitside1/public_html/edipo_blog/blog/wp-content/plugins/deans_code_highlighter/geshi.php on line 432

Warning: Missing argument 2 for GeSHi::GeSHi(), called in /home/storage/f/73/ab/bitside1/public_html/edipo_blog/blog/wp-content/plugins/codecolorer/codecolorer-core.php on line 137 and defined in /home/storage/f/73/ab/bitside1/public_html/edipo_blog/blog/wp-content/plugins/deans_code_highlighter/geshi.php on line 432

Olá pessoal, demorou um pouco mas vamos lá para mais um post da série sobre Ruby, nesta parte 1 vamos ver o básico da criação de métodos e uma “introdução” ao tratamente de execções.

Entõa vamos começar.

A definição de métodos no Ruby é feita com o uso da palavra def juntamento com o nome do método, opcionalmente você pode ter paramêtros nesse método se for o caso eles irão ser postos entre parenteses, por exemplo:

1
2
3
def minha_soma(a, b)
   a + b
end

Agora podemos fazer a chamado desse método usando seu nome, por exemplo, minha_soma(1,40).

Valores de Retorno

A finalização de um método acontece quando ele termina normalmente ou ele é quebrado por um lançamento de uma exeção, vamos usar um exemplo de calculo de fatorial para ilustrar isso, caso for passado como argumento um valor que seja menos que 0 então o método ira lançar uma exceção, caso contrário ele irá retorna a última expresão avaliada, pode notar a falta do return, em Ruby ele não é muito utilizado já que a última expressão a ser avaliada é à que é retornada, mas seu uso não ira quebrar o código.

1
2
3
4
5
def fatorial(n)
   raise "argumento nao valido" if n < 1
      return 1 if n == 1
      n * fatorial(n-1)
end

O Ruby aceita o retorno de n valores em um método, se for o caso a palavra return será necessária.

1
2
3
def  n_retornos(a,b,c)
   return a,b,c
end

Tratamento de Exceções

Você pode usar as palavras-chaves rescue, else e ensure como calusulas de uma declaracao begin

1
2
3
4
5
6
7
8
9
10
11
12
def alguma_coisa(a)
#Corpo de metodo aqui
   rescue
      #codigo da execao aqui
      #Esse codigo eh pulado se a execcao for levantada dentro do corpo do metodo ou se
      # um dos metodos que ele chamar levantar uma execao
   else
      #caso nao tenha execoes no corpo do metodo
      # entao esse bloco eh executado
   ensure
      #isto eh sempre executado
end

Bom pessoal isso foi a primeira parte, algo bem simples mesmo só para introduzir algumas coisas, veremos muito mais nos próximos posts, e também virão alguns apresentando em detalhes o tratamento de exceções.

É isso e até logo.