Rails 2.0… RELEASED! Parte 2

12 de dezembro de 2007 às 23:50 | Carlos Júnior

Continuando a série, vou falar de algumas outras novidades do Ruby on Rails 2.0 (ele não para, ele não para!). Mas de início tenho que falar de algo que acabou passando batido na primeira parte…

root

O Rails padronizou agora aquela rota que você acaba sempre (ou quase) incluindo em seus projetos, que mapeia a raiz do aplicativo (ou o home, index…). A forma padronizada agora é essa:

map.root :controller => "pages" # mapeia a action "index" do controller "pages"

ou

map.root :controller => "pages", :action => "show", :id => 10 # mapeia a action "show" do controller "pages" com o parâmetro id=10

Sessões em Cookies

As sessões no Rails 2.0 ficam agora totalmente em client side, ou seja, em cookies. Isso é bom pois dessa forma fica mais rápido e acabam as manutenções no tmp/sessions. Nas palavras do próprio DHH:

Esta configuração funciona bem se você segue as boas práticas e mantém o uso da sessão ao mínimo, como o caso comum de apenas guardar o user_id e o flash. Se, de qualquer forma, você está planejando guardar “códigos de lançamento nuclear” na sessão, guardar sessões no cookie é um mal negócio. Enquanto eles não podem ser forjados (então is_admin = true está ok), seu conteúdo podem ser vistos. Se isto é um problema para sua aplicação, você sempre pode voltar para o modo tradicional de guardar sessões.

Request Profiler

Chegou a salvação para aquela sua action que, como diria Lucas Petes, “chupa cana, assovia e bate palma”. Aquela action que faz um monte de coisas, e leva um bom tempo para executar… Request Profiler.

Com o Request Profiler você pode executar um profilling em um request. É assim:

$ cat login_session.rb
get_with_redirect '/'
say "GET / => #{path}"
post_with_redirect '/sessions', :username => 'john', :password => 'doe'
say "POST /sessions => #{path}"
$ ./script/performance/request -n 10 login_session.rb

Para quem não sabe, com o profiler você é capaz de saber exatamente qual parte do seu código está levando mais tempo para executar, com isso você pode focar suas atenções de forma a conseguir um melhor desempenho.

Mais performance no ActiveRecord

O pacote ActiveRecord ganhou milhares de fixes e várias melhoras. Uma que eu particularmente adorei é a Cached Query, que reconhece SQLs similares e retorna o resultado cacheado, assim:

>> User.find :all, :conditions => {:name => "a"}
>> User.find :all, :conditions => {:name => "a"}
olha o log!
  User Load (0.335079)   SELECT * FROM `users` WHERE (`users`.`name` = 'a')
  User Load (0.000363)   SELECT * FROM `users` WHERE (`users`.`name` = 'a') # viu o tempo?

Fixtures

Direto ao código…

  # groups.yml
  admins:
    name: admins
 
  # users.yml
  carlos:
    username: shopify
    password: secret
    group: admins # veja isso!!

Reparem 2 coisas: Você não precisa preencher os campos que já são de preenchimento automático (id, updated_at…). Você não precisa ficar guardando o ID que você deu para aquela outra fixture que é relacionada a que você está trabalhando agora, apenas o nome é suficiente.

Desserialização XML

Você já serializava um objeto em XML, agora você pode também fazer o caminho inverso:

>> u = User.new(:name => "Carlos")
=> #<user>
>> b = User.new.from_xml(u.to_xml)
=> #<user>
>> b
=> #<user>
</user></user></user>

Serialização JSON

A serialização em JSON mudou, repare:

Rails 1.2.6

>> User.new.to_json
=> "{attributes: {name: null,  updated_at: null, created_at: null}, new_record: true}"

Rails 2.0.1

>> User.new.to_json
=> "{\"name\": null, \"updated_at\": null, \"created_at\": null}"

No primeiro ele não serializa apenas as propriedades do usuário, mas sim o objeto ActiveRecord::Base, já no rails 2.0 ele passa a serializar exatamente igual a serialização XML, inclusive os parâmetros de :include e etc…

Menos gordura

Todos os acts_as_ALGUMACOISA foram movidos para seus próprios plugins, assim ./script/plugin install acts_as_ALUMACOISA deixa tudo normal. Outra coisa que mudou foi a postura com relação a bases de dados comerciais, todos foram movidos para seus gems. O Rails agora só trata com MySQL, SQLite e PostgreSQL. Para os bancos comerciais, gem install activerecord-BANCO-adapter (Ex.: activerecord-oracle-adapter).

Bom, acho que é só por hoje… aguardem o próximo artigo da série! See yo!

Deixe seu comentário


  • Deseja alterar a sua imagem de exibição? Faça uma conta no Gravatar.