Recentemente foram anunciados duas atualizações nos frameworks Rails. Para quem usava a versão 2.0.2 é recomendado passar a usar 2.0.4 e para quem já usava a 2.1.0 agora deve ir para 2.1.1.

A razão disso foram vulnerabilidades de segurança, especificamente para quem aceitava entrada de dados via XML. Isso foi prontamente corrigido e por isso as atualizações. Essas duas versões subiram hoje e até o fim do dia devem estar replicadas em todas as máquinas Linux compartilhada da Locaweb que suportam Rails.

Leia o resto do artigo para saber o que fazer. Além disso há mais novidades: Locarails versão 1.1.5. Continue lendo.

Atualizando o Rails

Se você é desenvolvedor Rails atualize na sua máquina também. Se estiver fazendo projetos com a versão 2.0.2 faça:

gem install rails –version=2.0.4

E se estiver fazendo projetos em Rails 2.1, faça:

gem install rails –version=2.1.1

No arquivo config/environment.rb do seu projeto em Rails 2.0.2, altere a seguinte linha:

RAILS_GEM_VERSION = ‘2.0.4’

E no mesmo arquivo, para projetos Rails 2.1, altere a mesma linha para:

RAILS_GEM_VERSION = ‘2.1.1’

Caso esteja com o Rails ‘congelado’ (freeze) dentro do diretório vendor/rails do seu projeto, atualize-o com:

rake rails:freeze:gems

Locarails

Finalmente, atualize seu projeto na Locaweb. E, neste ponto, outra atualização: o Locarails ganha versão 1.1.5.

Quando eu criei o Locarails o objetivo foi ajudar os desenvolvedores, principalmente os iniciantes, a utilizar o poder do pacote Capistrano, uma poderosa ferramenta de deployment automatizado. O Locarails deve ser instalado na sua máquina local de desenvolvimento, ele configurará a receita config/deploy.rb que o Capistrano usa, tudo de forma simples e sem codificação envolvida.

Porém, a versão inicial do Locarails funcionava perfeitamente com o Capistrano 2.4.3. Mas alguns dias atrás foi lançada a versão 2.5.0. Isso quebrou a compatibilidade e o Locarails passou a não se comportar corretamente. Eu mesmo já fiz as correções no Capistrano e enviei para apreciação do mantenedor do projeto, mas enquanto não é lançada a versão 2.5.1, resolvi atualizar o próprio Locarails para injetar as correções automaticamente.

Para atualizar ou instalar o Locarails na sua máquina local, faça:

gem install akitaonrails-locarails.

Recomendo refazer o processo inicial, então, a partir do diretório do seu projeto, faça:

cd meu_projeto

locarails . -f

A diretiva -f forçará a atualização da receita do Capistrano com a nova correção. Preencha os dados sobre sua hospedagem que ele pede. Depois, rode apenas uma vez:

cap deploy:setup

Finalmente, para colocar de fato sua aplicação em produção na hospedagem, faça:

cap deploy.

Toda vez que você modificar sua aplicação, apenas faça ‘cap deploy’. O Capistrano auxilia em outros cenários também. Digamos que você subiu na sua conta uma versão com bugs e quer rapidamente voltar seu site para a versão imediatamente anterior. Para isso, sem mexer no seu código ainda, faça apenas:

cap deploy:rollback

E instantaneamente seu site voltará ao ar sem os bugs. Você agora pode corrigí-los na sua máquina local e quando estiver realmente pronto, faça novamente ‘cap deploy’.

Brindes Locarails

Mais do que isso, as receitas do Capistrano permitem muito mais e no Locarails eu embuti algumas receitas que podem ajudá-lo. Por exemplo, digamos que você queira um backup do seu banco de dados MySQL. Para isso faça:

cap db:backup

Ele fará um dump da sua base, compactará utilizando tar e gzip e automaticamente já fará o download para sua máquina local no arquivo com o nome ‘dump.tar.gz’. O tempo do download, claro, dependerá do tamanho da sua base de dados e da velocidade de sua conexão.

Agora, digamos que alguma coisa errada aconteceu à sua base e você quer restaurar os dados que tinha puxado anteriormente. Garanta que existe o backup chamado ‘dump.tar.gz’ no diretório do seu projeto e então faça:

cap db:restore

Ele fará o upload do arquivo ‘dump.tar.gz’ à sua hospedagem e já fará a restauração do banco automaticamente. Cuidado: esta é uma operação destrutiva e ele obviamente apagará os dados do seu banco e colocará seu backup por cima. Tenha certeza do que está fazendo antes de usar este comando.

Finalmente, digamos que você note algum comportamento estranho na sua aplicação Rails e quer rapidamente ver o log para checar. Para isso use o comando:

cap log:tail

Ele fará um ‘tail’ remoto no arquivo ‘production.log’ da sua aplicação Rails. O tail, para quem não conhece, é um comando que ‘observa’ alterações num arquivo texto e já mostra imediatamente na sua tela. Portanto, se usar esse comando ele ficará lendo tudo que aparecer no arquivo de log. Vá no seu browser e faça sua aplicação dar problema e verá essa entrada aparecendo no seu log imediatamente. Cuidado: essa operação consome a banda da sua hospedagem e é recomendada apenas quando for muito necessário. Não deixe ela ligada indefinidamente.

Para usuários avançados, que conhecem os conceitos de SSH, sabe que as hospedagens Locaweb sempre suportaram conexão via SSH. Em especial, se estiver num Linux ou num Mac, você pode gerar um par de chaves – privada e pública – usando o comando “ssh-keygen -t rsa”. Normalmente isso irá gerar o par de chaves ‘~/.ssh/id_rsa’ e ‘~/.ssh/id_rsa.pub’.

Quando você se conecta via SSH ele sempre pede a senha da sua conta. Para não pedir mais senha, você pode adicionar sua chave pública no arquivo ~/.ssh/authorized_keys em sua hospedagem. Para fazer isso automaticamente use o Capistrano novamente. Com as chaves já geradas e seguindo exatamente os nomes descritos acima, use o comando:

cap ssh:upload_key

E pronto, ele fará o upload da sua chave pública e, com isso, não será mais necessário digitar sua senha para entrar na hospedagem. Cuidado: Isso funciona porque o SSH fará a autenticação baseada na chave privada (id_rsa) que somente você tem. A segurança da chave privada é responsabilidade do seu dono e ela nunca deve ser enviada a ninguém nem a outra máquina. Considere sua chave privada algo tão ou mais importante que seu cartão de crédito, que você não mostra nem empresta a ninguém.

Locarails para outros projetos

E quem disse que o Capistrano serve somente para projetos Rails? Se se eu quiser utilizar o Locarails para projetos não Rails, como em PHP por exemplo?

Digamos que você quer controlar seu blog em WordPress usando Capistrano. Pois bem, crie um diretorio para isso:

mkdir wordpress

Agora, dentro dele, crie um diretorio chamado ‘public’

cd wordpress

mkdir config

mkdir public

Agora descompacte os fontes do wordpress – da maneira que melhor convir, seja simplesmente descomprimir um tar gzip ou fazer algo como svn checkout – na pasta public! Este é o truque!

Agora rode o comando locarails conforme explicado acima:

locarails .

cap deploy:setup

cap deploy

Realmente, eu não fiz esse teste ainda 🙂 Mas tecnicamente não há motivos para não funcionar porque a função do Capistrano é simplesmente pegar todos os fontes do seu projeto enviá-los ao servidor, independente da linguagem. No caso, a configuração padrão pensará que é um projeto Rails e inclusive criará o arquivo tmp/restart.txt no servidor imaginando que precisa reiniciar o Phusion Passenger. Mas tudo isso será inócuo à sua aplicação WordPress e de graça você ganha as funcionalidades de rollback, que um dia pode ser fundamental.

Locarails + Git

E não é só isso. Ainda é uma funcionalidade experimental mas o Locarails já suporta configuração para Git. Além do mais todas as contas Linux da Locaweb automaticamente já suportam Git!

O exemplo mais simples é o seguinte:

rails teste

cd teste

git add .

git commit -a -m “initial commit”

locarails . -m git

cap deploy:setup

cap deploy

Os comandos acima criam um novo projeto Rails, então, de dentro do projeto executa-se o comando locarails com a opção para git. Ele fará algumas perguntas – basta dar enter quando a pergunta oferecer uma resposta padrão – e automaticamente criará um repositório Git remoto no seu servidor e já enviará seu código para lá.

A partir daí, toda vez que modificar seu projeto faça o seguinte:

git commit -a -m “minhas modificacoes”

git push

cap deploy

Isso faz commit das suas modificações no repositório Git local. O ‘git push’ envia apenas as alterações para o repositório remoto no servidor. E o ‘cap deploy’ atualiza apenas o que foi modificado desde o último deployment, aumentando consideravelmente a velocidade das suas atualizações.

Git é um assunto mais avançado que merece um artigo à parte. Aguardem mais novidades sobre isso! E aproveitem para testar o Locarails. Qualquer dúvida em relação a esta ferramenta, enviem e-mail diretamente para mim em fabio.akita@locaweb.com.br.