Rails 2.0.4 - Release de Manutenção

post

Acaba de ser liberada a versão 2.0.4 do Rails. É uma liberação para corrigir alguns problemas de segurança, compatibilidade e correções de alguns erros. A mais importante das correções, e graças a comunidade, foi ajustar a vulnerabilidade do REXML que poderia ser usada para um ataque DoS.

Para instalar a nova versão: gem install rails -version 2.0.4

Vejam aqui todas as correções

Rails-doc

Acaba de ser lançado o site rails-doc.org, uma aplicação de documentação. Ele foi desenvolvido para que os desenvolvedores Rails tenha uma alternativa muito boa de consulta a documentação do Rails.

Existem outras diversas fontes de consultas as API do rails, mais o que chama atenção no rails-doc é ser um sistema social de documentação de código. Desenvolvedores Rails podem adicionar notas a documentação atual, basta estar registrado.

Git Branch no GEdit

Tenho usado o GEdit para desenvolver em Rails. Ele é leve, rápido e eficiente. Não preciso mais do que isto.

O grande problema era que eu estava me perdendo, e lá pelas tantas, depois de alguns commit's, não sabia em qual branch eu me encontrava. Para resolver isto, voltei a usar python e fiz um plugin que informa qual o branch atual na barra de status.

Para usar é só fazer o checkout do código fonte no GitHub e copiar os arquivos para:


~/.gnome2/gedit/plugins

Reinicie o GEdit, vá em Edit\Preferences\plugins e ative o plugin "Git Branch". Para usa-lo basta pressionar "Ctrl + Alt + B" ou em "Tools/Git Branch" e acompanhar na barra de status o branch atual.

Pretendo agora fazer um outro plugin para executar comandos do Git no próprio GEdit.

Para quem for usar o GEdit para desenvolver em Rails recomendo instalar também:

Se o plugin estiver sendo útil para você, não esqueça de me recomendar no working with rails.

JSMask - Máscara em campo texto

Como anunciei no twitter, hoje a tarde criei um plugin para resolver alguns problemas que tínhamos com datas. Basicamente, precisávamos que os campos de datas do sistema tivessem uma máscara.

Já vinha utilizando, em um outro projeto, alguns javascripts. O grande problema que eles são "gordos" e tem muita coisa implementada de forma "estranha".

Então resolvi criar um javascript para resolver o problema. Então surgiu o JSMask 0.1, baseado no LowPro e no Xaprb.InputMask.

Em partes resolvia meu problema, mais não era integrado com Rails. Então mais alguns códigos e surgiu o Plugin JSMask 0.1.

Para demonstrar as funcionalidades do plugin, fiz um pequeno tutorial. Vamos testar ?

Preparando o ambiente

Este tutorial foi baseado no Rails 2.0, então a primeira coisa é verificar se você está utilizando a versão correta:

1
2
rails -v
Rails 2.0.2

Tudo certo então vamos criar nossa aplicação para demonstração:


rails jsmask_demo

As configurações de banco de dados ficam por conta de vocês. Vamos criar o banco:


rake db:create:all

Vamos gerar nosso scaffold:


script/generate scaffold Schedule begin:date end:date

Isto vai gerar os Controller, Helper, Model, Migration e os testes. Agora é só executar os migrations:


rake db:migrate

Já temos nossa aplicação, com a inserção de datas no padrão do rails:

default date in rails

Instalando o plugin

O plugin está no github e para instalar:


git clone git://github.com/ozeias/js_mask.git vendor/plugins

Para o Edge Rails (>= 2.1)


script/plugin install git://github.com/ozeias/js_mask.git

Utilizando o Plugin

Agora é simples, vamos alterar nossas views geradas pelo scaffold e testar o plugin:

1
2
3
4
5
6
<!-- app/views/layouts/schedules.html.erb -->
...
  <title>Schedules: <%= controller.action_name %></title>
  <%= stylesheet_link_tag 'scaffold' %>
  <%= javascript_include_tag :defaults, :jsmask %>
...
1
2
3
4
5
6
7
8

<h1>New schedule</h1><!-- app/views/schedules/new.html.erb -->
<%= error_messages_for :schedule %>

<%= render :partial => @schedule, 
  :locals => { :button_name => "Create"} %>

<%= link_to 'Back', schedules_path %>
1
2
3
4
5
6
7
8
9
10
<!-- app/views/schedules/edit.html.erb -->
<h1>Editing schedule</h1>

<%= error_messages_for :schedule %>

<%= render :partial => @schedule, 
  :locals => { :button_name => "Update"} %>

<%= link_to 'Show', @schedule %> |
<%= link_to 'Back', schedules_path %>

Vamos criar um partial para ficar DRY e nele inserir a funcionalidade do plugin

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!-- app/views/schedules/_schedule.html.erb -->
<%- form_for(@schedule) do -%>
  <p>
    <b>Begin</b><br />
    <%= text_field_with_js_mask :schedule, :begin, :class => 'mask_date_iso' -%>
  </p>
  <p>
    <b>End</b><br />
    <%= text_field_with_js_mask :schedule, :end, :class => 'mask_date_iso' -%>
  </p>
  <p>
    <%= submit_tag button_name -%>
  </p>
<%- end -%>

E o resultado:

date in jsmask

Os formatos de máscara suportados são:

A primeira versão é muito básica, vou fazer alguns ajustes e adicionar novas funcionalidades em breve. Sugestões, dicas e críticas são bem-vindas.

Source code: http://github.com/ozeias/js_mask/tree/master

Exemplo: jsmask_demo.tar.gz

Se o plugin estiver sendo útil para você, não se esqueça de me recomendar no working with rails.

Mini Curso de Rails

Ontem foi realizado o segundo mini - curso de Rails aqui em Toledo. No ano passado dei uma introdução a linguagem Ruby, mais este ano foquei no framework, e foi interessante. Tivemos um bom número de participantes e o mais importante foi saber que a galera gostou.

Foi um curso nos moldes de um blog em 15 minutos, falamos um pouco sobre o que é o Rails, desenvolvemos um mini blog e falamos sobre a melhor comunidade que já encontrei, a comunidade Rails.

Assim que tiver as fotos do evento vou postar aqui. Abaixo segue os slides da curso e o mini blog para download. Obrigado a todos que participaram.

Agora vamos tentar organizar um Paraná On Rails, já conversei com o Fábio Akita e com o Carlos Brando. O Júlio Monteiro já se dispôs a dar uma palestra e também ofereceu o Treina Tom para o evento. Tem tudo para ser um sucesso.

Agradecimentos:

Rails escala?

A duas semanas voltou a tona a discussão de que Rails não escala. Tudo porque alguém ouviu falar que não sei quem tinha falada que o Twitter iriá mudar de Rails para qualquer outra coisa que tenha escalabilidade.

Mais que diabo é escalabilidade? O que torna uma linguagem escalável? Por que de tanto bafafá por causa de um framework?

Eu trabalho quase que 100% em Rails hoje e gosto disto. Apanhei muito das macacas de auditório e ainda hoje escuto muito, mais nada me deixa tão indignado quando falam de escalabilidade. Meu professor de Engenharia de Software, muito competente por sinal, sempre enfatizou que tudo pode escalar, depende somente de como você irá fazê-lo.

Quase sempre será possível adicionar mais hardware ou mais servidores web. A questão então não é se Rails escala, mais sim quantos servidores você irá precisar para um sistema de grande porte, quanto você vai precisar de arquitetura de rede e quantos analista cuidará de tudo isto. Pronto, você acabou de escalar.

Na entrevista (ou besteirol) do Alex Payne, ele salienta o seguinte:

"The problem is that more instances of Rails (running as part of a Mongrel cluster, in our case) means more requests to your database. At this point in time there’s no facility in Rails to talk to more than one database at a time."

Na realidade o grande problema são os desenvolvedores deles, os Twitter’s estão mais ligados em publicidade e marketing do que em tecnologia. Uma boa pesquisada no Google e vão ver que é possível fazer com que um cluster conecte ao mais de banco. O resto é balela.

Portanto, o grande problema é que tem muita gente que só quer falar mal, não só de Ruby, mais de tudo que é novo e tem um futuro promissor. Um bando de incompetentes que se escondem atrás de certificações e diplomas comprados.

Assim, Ruby ou qualquer outra linguagem escala basta ser competente.

update:

Acabei de colocar a foto do Akita dando uma palestra no FISL 2008. Detalhe: juro que não sabia desta foto quando escrevi este post. A foto original está aqui e a dica foi dada pelo Leonardo Torres.

ImageScience e suas dependências

Final de semana aproveitei para atualizar meu blog para o mephisto 0.8, e dar uma 'arrumada na casa'. Segui os procedimentos de instalação e tudo ocorria muito bem quando ele reclamou a não existia da biblioteca do 'FreeImage.h'.

O problema não é só para quem vai atualizar o mephisto, mais para todos que usam o gem ImageScience, uma alternativa muito rápida ao RMagick. Vale lembrar que não é um problema do mesmo, a biblioteca freeimage é uma dependência dele, e não é exigida na instalação.

Mais vamos a resolução:

Para distros derivados do Debian


sudo gem install libfreeimage3 libfreeimage-dev

Para demais distros

1
2
3
4
5
6
cd /usr/local/src
sudo wget http://ftp.cica.es/ubuntu/ubuntu/pool/universe/f/freeimage/freeimage_3.9.3.orig.tar.gz
sudo tar -xvf freeimage_3.9.3.orig.tar.gz
cd freeimage-3.9.3.repacked/FreeImage
make
sudo make install

Depois é só instalar os gems:

1
2
sudo gem install rubyinline
sudo gem install image_science

Simples não ?!

Gerando PDF com o RTeX no Rails

RTeX é uma biblioteca ruby usado para gerar documentos pdf usando LaTeX.

Instalação

Instalando o LaTeX

O processo de instalação é muito básico, mais para quem está começando pode complicar com um pouco. Para inicio de conversa precisamos instalar a biblioteca LaTeX no seu sistema. Em sistemas linux (testei no ubuntu):


sudo apt-get install tetex-base tetex-bin texlive-base-bin

Instalando o RTeX

A maneira mais fácil de instalar o RTeX é usando o Rubygems:


sudo gem install rtex

Instalando o Plugin na sua aplicação

Para usar o RTeX na sua aplicação Rails basta executar o seguinte comando:


rtex --install /caminho/da/sua/aplicação

Este comando instalará o plugin na sua aplicação (aplicação/vendor/plugins/rtex).

Usando o RTeX

Vamos criar os arquivos:

Nos arquivos:

app/controllers/reports_controller.rb

1
2
3
def index
   @sellers = Seller.find(:all)
end

app/views/layouts/application.pdf.rtex

1
2
3
4
\documentclass[12pt]{article}
\begin{document}
   <%= yield %>
\end{document}

app/views/sellers/index.pdf.rtex

1
2
3
4
\section*{Sellers}
\begin{seller}
   <%= render :partial => @sellers -%>
\end{seller}

app/views/sellers/_seller.pdf.rtex


\seller <%= seller.name -%> \\

UPDATE 24/05/2008:

Precisei fazer um novo projeto usando o rtex e me retornou o seguinte erro:

1
2
Template is missing
Missing layout layouts/application.pdf.erb in view path /home/ozeias/workspace/ror/meuapp/app/views

Acontece que neste tutorial eu esqueci de instalar o rtex no projeto, então basta usar o comando:


rtex -i .

Fonte:

Rails on Lighthouse

Já está no ar o novo trac do Rails. O projeto agora está na Lighthouse.

Além do Rails, migraram também o Prototype e o Capistrano.

Rails 2.0

Hoje foi um dia excepcional. O dia inteiro nos blog's acompanhei a expectativa da comunidade em torno do lançamento do Rails 2.0. A esperança era que fosse anunciado até o final do dia no blog oficial a versão final.

Finalmente as 15:03 chegou a boa noticia Rails 2.0: It's done!. Você vai encontrar bastante informações no post oficial.

Para instalar: gem install rails -y. Note que será instalado a versão 2.0.1, porque foi encontrado um bug no Active Record que poderia fazer com que o código fosse executado duas vezes.

Parabéns a todos que contribuíram, que testarão e incentivaram para chegarmos até aqui.

Aproveitem o final de semana e testem bastante.

Rails 2.0: Release Candidate 2

Acaba de ser lançando o RC2 do Rails 2.0. Foram corrigidas várias falhas, fizeram alguns ajustes e segundo o anúncio oficial este pode ser o último release, que está previsto para os próximos dias.

Mais informações pode ser obtidas aqui

Rails e Microformatos

O que são Microformatos

Microformatos são uma série de especificações que permite aos homens e as máquinas relacionar informações, ou seja, as informações contidas em um artigo passa a ser um grande dicionário de conteúdo "semântico". Basicamente é isto, para quem ainda não conhece pode ler este artigo do Henrique: Microformats.

Rails e Microformatos

Para o pessoal que desenvolve em Rails tem um plugin que é muito útil o Mofo. Fiz alguns testes por aqui e percebi que é bem fácil de usar. Assim que possível vou colocar aqui alguns exemplos.