Ruby on Rails

Apostila de Ruby on Rails da Caelum liberada para download

No último dia 12/12/2009, a Caelum liberou gratuitamente a apostila utilizada por eles nos cursos de Ruby on Rails. Para quem está começando, vale muito a pena fazer o download para estudo.

Para fazer o download, clique aqui.

Link direto para o PDF aqui.

A apostila é muito completa. É abordado desde os conceitos básico da programação em Ruby até o uso de gems, plugins e AJAX no Rails. É um bom pontapé de início essa apostila.

Abaixo segue o índice da apostila para você ter uma noção do que irá encontrar.

1 Agilidade na Web 1
1.1 A agilidade
1.2 A comunidade Rails
1.3 Bibliografia
1.4 Tirando dúvidas
1.5 Para onde ir depois?
2 A linguagem Ruby 4
2.1 A história do Ruby
2.2 Características
2.3 Instalação do interpretador
2.4 Outras implementações
2.5 MagLev
2.6 Ruby Enterprise Edition
2.7 Interactive Ruby
2.8 Tipos Básicos
2.9 Para Saber Mais – Desafios
2.10 Para Saber Mais – Desafio

3 Ruby Avançado 12
3.1 Mundo orientado a objetos
3.2 Métodos comuns
3.3 Meta-programação
3.4 Definição de métodos
3.5 Discussão: Enviando mensagens aos objetos
3.6 Classes
3.7 Desafio: Classes abertas
3.8 self
3.9 Desafio: self e o método puts
3.10 Atributos e propriedades: acessores e modificadores
3.11 Syntax Sugar
3.12 Métodos de Classe
3.13 Para saber mais: Singleton Classes
3.14 Metaprogramação
3.15 Convenções
3.16 Coleções
3.17 Blocos e Programação Funcional
3.18 Desafio: Usando blocos
3.19 Mais OO
3.20 Modulos
3.21 Manipulando erros e exceptions
3.22 Exercício: Manipulando exceptions
3.23 Arquivos Ruby

4 Ruby on Rails 29
4.1 Ruby On Rails – Apresentação
4.2 Aprender Ruby?
4.3 RadRails 30
4.4 Primeira Aplicação
4.5 Exercícios: Iniciando o Projeto
4.6 Estrutura dos diretórios
4.7 O Banco de Dados
4.8 Exercícios: Criando o banco de dados
4.9 A base da construção: scaffold (andaime)
4.10 Exercícios: Scaffold
4.11 Gerar as tabelas
4.12 Versão do Banco de Dados
4.13 Exercícios: Migrar tabela
4.14 Server
4.15 Documentação do Rails
4.16 Exercício Opcional: Utilizando a documentação

5 Active Record
5.1 Motivação
5.2 Exercícios: Controle de Restaurantes
5.3 Modelo – O “M” do MVC
5.4 ActiveRecord
5.5 Rake
5.6 Criando Modelos
5.7 Migrations
5.8 Exercícios: Criando os modelos
5.9 Manipulando nossos modelos pelo console
5.10 Exercícios: Manipulando registros
5.11 Exercícios Opcionais
5.12 Finders
5.13 Exercícios: Buscas dinâmicas
5.14 Validações
5.15 Exercícios: Validações
5.16 Exercícios – Completando nosso modelo
5.17 O Modelo Qualificação
5.18 Exercícios – Criando o Modelo de Qualificação
5.19 Relacionamentos
5.20 Para Saber Mais: Cache
5.21 Exercícios – Relacionamentos
5.22 Para Saber Mais – Eager Loading
5.23 Para Saber Mais – Named Scopes
5.24 Para Saber Mais – Modules

6 Controllers e Views
6.1 O “V” e o “C” do MVC
6.2 Hello World
6.3 Exercícios: Criando o controlador
6.4 Redirecionamento de Action e Action padrão
6.5 Trabalhando com a View: O ERB
6.6 Entendendo melhor o CRUD
6.7 Exercícios: Controlador do Restaurante
6.8 Helper
6.9 Exercícios: Utilizando helpers para criar as views
6.10 Partial
6.11 Exercícios: Customizando o cabeçalho
6.12 Layout
6.13 Exercícios: Criando o header
6.14 Outras formas de gerar a View
6.15 Filtros

7 Rotas
7.1 routes.rb
7.2 Pretty URLs
7.3 Named Routes
7.4 REST – map.resource
7.5 Actions extras em Resources
7.6 Diversas Representações
7.7 Para Saber Mais – Nested Resources

8 Completando o Sistema
8.1 Exercícios
8.2 Selecionando Clientes e Restaurante no form de Qualificações
8.3 Exercícios
8.4 Exercícios Opcionais

9 Calculations
9.1 Método
9.2 Média
9.3 Exercícios

10 Associações Polimórficas
10.1 Nosso problema
10.2 Alterando o banco de dados
10.3 Exercícios

11 Ajax fácil com RJS
11.1 Adicionando comentários nas views
11.2 Métodos de RJS Templates
11.3 Exercícios
11.4 Adicionando comentários
11.5 Exercícios
11.6 Exercícios – Enviando os dados com Ajax

12 Alguns Plugins e Gems Importantes
12.1 Paginação
12.2 Exercícios – Título
12.3 Hpricot
12.4 Exercícios – Testando o Hpricot
12.5 File Uploads: Paperclip
12.6 Exercícios

13 Apêndice A – Testes 127
13.1 O Porquê dos testes?
13.2 Test::Unit
13.3 RSpec
13.4 Cucumber, o novo Story Runner

14 Apêndice B – Integrando Java e Ruby
14.1 O Projeto
14.2 Testando o JRuby
14.3 Exercícios
14.4 Testando o JRuby com Swing

15 Apêndice C – Deployment
15.1 Webrick
15.2 CGI
15.3 FCGI – FastCGI
15.4 Lighttpd e Litespeed
15.5 Mongrel
15.6 Proxies Reversos
15.7 Phusion Passenger (mod_rails)
15.8 Ruby Enterprise Edition
15.9 Exercícios: Deploy com Apache e Passenger

16 Apêndice D – Instalação
16.1 Ruby – Ubuntu
16.2 Ruby – Windows
16.3 Rails
16.4 JDK
16.5 Aptana
16.6 Mongrel
16.7 MySQL
16.8 SVN

  • Share/Bookmark

Problema do Rails 2.2.2 com o MySQL em Windows

Desde que a versão 2.2.2 do Rails foi lançada, alguns problemas relacionados ao driver do MySQL, que conectava a aplicação Rails ao banco, começaram a surgir e incharam lista de discussões com relatos de problemas. Um desses problemas era que quando vamos executar o rake db:migrate ocorre um erro que apresentava a seguinte mensagem:

!!! The bundled mysql.rb driver has been removed from Rails 2.2. 
Please install the mysql gem and try again: gem install mysql.
rake aborted!
126: The specified module could not be found.   - 
c:/ruby/lib/ruby/gems/1.8/gems/mysql-2.7.3-x86-mswin32/ext/mysql.so
 
(See full trace by running task with --trace)

Acredito que se você tem esse problema você já deva ter instalado o gem do MySQL e mesmo assim continuou tendo esse problema. Caso você não tenha instalado o gem, por favor faça:

gem install mysql --no-rdoc --no-ri

Feita a instalação, veja se na lista de gems instaladas, se encontra o MySQL. Para ver suas gems instaladas:

gem list --local

O gem do MySQL deverá estar instalado.

Bem, se você tentar rodar o migrate denovo, provavelmente terá o mesmo problema. Pesquisando pelas partes mais distantes da internet encontrei uma solução que dizia para copiar e colar o arquivo <MYSQL_HOME>/bin/libmysql.dll para pasta <RUBY_HOME>/bin. Mas isso tem um porém. Se sua versão do MySQL instalado for a 5.1 o problema continuará.

Você terá que copiar o libmysql.dll do MySQL 5.0. No link abaixo você poderá fazer o download da versão correta do libmysql.dll pra usar:

http://instantrails.rubyforge.org/svn/trunk/InstantRails-win/InstantRails/mysql/bin/libmySQL.dll

Copie o libmysql.dll do link acima para a pasta <RUBY_HOME>/bin. Feito isso, tente novamente executar o migrate e verás que agora funciona!

  • Share/Bookmark

Usando o Gmail para enviar e-mail com o ActionMailer no Rails

Existe uma maneira muito fácil de se enviar e-mails no Rails e usando o Gmail. Nesse pequeno tutorial tentarei explicar como fazer isso funcionar.

Primeiramente é preciso saber que o Gmail utiliza para autenticação de protocolo SMTP (envio de e-mails) o ssl/tls. Essa forma de autenticação não é suportada nativamente pelo ActionMailer. Isso quer dizer que precisaremos de uma ajudinha para podermos enviar e-mails utilizando o Rails e o Gmail.

Essa ajudinha é uma biblioteca que está voando pela Internet (eu não sei quem é o autor e muito menos da onde ela saiu) e nos ajudará com a autenticação. Eu tenho uma cópia dessa biblioteca em meu GitHub, você pode pegá-la aqui.

Com a biblioteca em mãos copie ela para a pasta lib do seu projeto Rails. Provavelmente ficará assim o caminho:

/lib/smtp_tls.rb

Agora abra o arquivo config/environment.rb e lá no fim, bem lá no fim mesmo, adicione o seguinte trecho de código:

ActionMailer::Base.default_content_type = "text/html"
ActionMailer::Base.smtp_settings = {
   :address =&gt; "smtp.gmail.com",
   :port =&gt; 587,
   :authentication =&gt; :plain,
   :user_name =&gt; "seuemail@gmail.com", #Você pode usar o Google Apps!
   :password =&gt; 'suasenha'
}

Bacana. Está tudo configurado. Agora vamos ver como se fazer no ActionMailer para se enviar um e-mail. Vamos gerar um novo Mailer. Em seu console digite:

ruby script/generate mailer Notificador

Seu novo mailer será gerado. Após a geração, abra ele (app/models/notificador.rb)

Adicione o seguinte método:

def notificar
     recipients "destinatario@email.com"
     from  "meumail@meuemail.com"
     subject "Titulo do Email"
end

Agora você precisa adicionar uma view com o mesmo nome desse método, assim como se faz com os Controllers. Nese caso, a vew ficaria views/teste/notificar.erb

Nesse arquivo ficará tudo o que você quer enviar ao destinatório. É o corpo do e-mail mesmo. Você pode utilizar variáveis de instância caso queira passar alguma informação para a view, da mesma forma que é feito nos controllers.

Criada a view, basta chamar o mailer nos controllerspara enviar o email da seguinte forma:

Notificador.deliver_notificar

Repare que é colocado um deliver_ ali antes do nome do método que setamos. Isso é normal.

Se tudo ocorrer bem seu e-mail será enviado. Porém enviando um e-mail dessa forma irá ter um tempo de request mais demorado.

  • Share/Bookmark

Obtendo Hash MD5 e SHA com Rails

Para se obter hashs tanto MD5 como SHA com Rails é muito fácil. Abaixo segue o que eu faço para calcular os Hashs:

def md5(str)
    return Digest::MD5.hexdigest(str)
end
 
def sha1(str)
    return Digest::SHA1.hexdigest(str)
end
 
def sha256(str)
    return Digest::SHA256.hexdigest(str)
end

Você pode ver no exemplo acima que coloquei três funções. Uma para MD5, outra para SHA1 e outra para SHA256. Mas existem outros ainda. Veja:

  1. Digest::SHA1.hexdigest() – Produz 40 caracteres de dígitos hexadecimais.
  2. Digest::SHA256.hexdigest() – Produz 64 caracteres de dígitos hexadecimais.
  3. Digest::SHA384.hexdigest() – Produz 96caracteres de dígitos hexadecimais.
  4. Digest::SHA512.hexdigest() – Produz 128 caracteres de dígitos hexadecimais.

Se quiser, você pode testar essas funções no console do Rils. Basta abrir o console:

ruby script/console

Digite o comando:

strHash = Digest::SHA1.hexdigest("string")

A saída deverá ser:

=> "ecb252044b5ea0f679ee78ec1a12904739e2904d"

Fácil e simples.

  • Share/Bookmark

Rails Summit – Algumas apresentações e Fotos

Até agora somente disponibilizaram duas apresentações feitas no Rails Summit Laton America 2008. Estou sempr vendo se os caras vão disponibilizar ou não as apresentações. Assim que eles disponibilizarem (se disponibilizarem), colocarei o link aqui no Blog.

Por enquanto somente essas duas apresentações sairam:

E você pode achar muitas fotos do evento fazendo essa busca no Flickr.

É isso. Assim que tivermos mais novidades, estarei postando!

  • Share/Bookmark

Rails Summit Latin America 2008 – Excelente

Evento totalmente excelente.

Para quem esteve no evento sabe o que eu estou falando. Foi um evento muito, mas muito bom mesmo. As palestras de ltíssimo nível, bem organizado, local be acessível para que vem de fora e ainda com as “locawebzetes”. Fábio Akita e o pessoal da organização realmente estão de parabéns.

Dia 1

Fábio Akita abriu o evento e passou a palavra para Gilberto Mautner que é co-fundador da Locaweb. Esse é o cara que trouxe o Ruby on Rails para a Locaweb. Na abertura, tivemos um vídeo onde os dois loucos do RailsEnvy mandaram uma mensagem para o Rails Summit Latin America 2008. Vocês podem ver o vídeo aqui: http://vimeo.com/1974744

Sobre as palestras, no primeiro dia tivemos excelentes palestras com Chad Fowler falando sobre como ser reconhecido e como ser “remarkable” (be remarkable) com o que você faz. Esse assunto tanto cabe em desenvolvimento como em qualquer outra área profissional.

David Heinemeir Hanson (D.H.H) respondeu dúvidas e questões do pessoal a respeito (logicamente) do Ruby on Rails. Foram abordadas questões sobre Thread Safety, Internacionalização, Release do Rails 2.2 (a qual ele não revelou) entre outras.

Sobre Rest tivemos uma palestra muito legal com George Malamidis e Danilo Sato, ambos da ThoughtWorks.

Assisti também a palestra de Carlos Brando e a experiência dele e da equipe brasileira trabalhando para a SurgeWorks. Foi abordado assuntos bem interessantes como a aplicação de métodos ágeis com equipes remotas.

Tivemos um keynote de Chris Wanstrath criador do repositório GitHub um dos mais acessados pela comunidade Rails. Ele contou sobre a trajetória de sua vida profissional até chegar no GitHub.

E para finalizar o primeiro dia tivemos uma “desconferência” (Birds of a Feather) onde quem quisesse subir no palanque para falar o que queria sobre Ruby/Rails ou relacionado podia. Uma momento muito bom de descontração mesmo.

Nesse primeiro dia não tive a oportunidade de assistir algumas palestras pois eram paralelas com outras. Assim não poderei falar muito sobre as palestras do Fábio Akita e Dr.Nic.

Dia 2

Já logo pela manhã começamos com a palestra dos carinhas (Ninh Bui e Hongli Lai) da Phusion. Essa palestra foi excelente. A apresentação dos caras é sensacional. Falaram sobre passenger, escalabilidade, distribuição de carga…

Depois por áudio conferência, tivemos uma apresentação de Charles Nutter e Thomas Enebo que são criadores mantenedores do JRuby. Fizerem demonstração incríveis e como é fácil rodar aplicações Swing com JRuby e também alguns benchmarks com JRuby.

Fiquei curioso sobre a palestra de George Guimarães que falou sobre deployments e configuração de ambiente de produção para aplicações Rails. Ele também abordou algumas dificuldades que tiveram na construção da StartUp Pagestacker.

Para mim, as melhores palestras vieram nesse momento. As palestras de David Chelimsky sobre RSpec e sobre o Cucumber foram excelentes. Explicou os conceitos do BDD (Behavior Driven Development) e do TDD (Test Drive Development) além de mostrar exemplos reais da utilização do RSpec e do Cucumber. Fiquei honrado de poder assitir a palestra do David e espero poder assistir muitas outras.

Danilo Sato voltou no dia 2 (mas agora sem falar inglês e sem o George Malamidis) e também fez uma ótima apresentação sobre testes automatizados. Mostrou exemplos e problemas enfrentados no dia a dia do desenvolvedor na hora de elaborar testes.

Fabio Kung também palestrou no evento falando sobre o uso de JRuby porém mais focado na VM Java do que no código Ruby propriamente dito. Apresentou vantagens sobre o uso do JRuby ao invés do interpretador do Matz e exemplificou isso no uso de memória, e threads.

E para finalizar o ciclo de palestras no segundo dia tivemos o keynote de Obie Fernandez que falou com é dia a dia no desenvolvimento dos projetos de sua empresa Hashrocket onde eles usam métodos ágeis e Rails. Mostrou o que deve ser feito e quais as atitude a serem tomadas para se ter sucesso no desenvolvimento com Rails. Essa também foi uma das melhores palestras do dia.

Assim como no primeiro dia não consegui assistir a todas as palestras do dia devido as sessões paralelas então acabei perdendo as palestras de Jay Fields, Manoel Lemos, Vinícius Teles, Phillippe Hanrigou e Luis Lavena.

Depois tivemos alguns sorteios dos patrocinadores (Intel, Sun, Accept, Info Exame, Linux Magazine…) e da Locaweb. Saí do evento por volta das 20:45 e fiquei totalmente satisfeito com o que vi e aprendi. Valeu muito a pena o investimento. Se eu fosse você já começava a me preparar para o Rails Summit Latin America 2009. Eu já estou me preparando.

Fotos

Aqui segue alguns materiais “coletados” pela Net. Como eu sou uma anta e esqueci de levar máquina fotográfica, pegarei emprestado os Flickrs de algumas pessoas que foram ao evento:

Assim que eu conseguir mais materiais legais do evento eu com certeza postarei. Muitos palestrantes irão disponibilizar suas apresentações na Web, assim que eu descobrir onde elas ficarão eu também postarei.

Veja também o LiveStream do BlogBlogs.

  • Share/Bookmark

Rails Summit Latin America

Fala galera! Já faz um tempinho que não posto pois o trabalho está corrido. Vamos ver se daqui para frente volto apostar com mais frequência, tá difícil, mas vou tentar!

Bom, volto com esse post para divulgar o maior evento sobre Ruby on rails da América Latina que vai acontecer aqui no Brsil. Em São Paulo. É o Rails Summit Latin America. O evento promete e os palestrantes são de altíssimo nível. Mas muito alto mesmo, o próprio DHH, criador do framework, irá palestrar.

No blog do Akita há muitas informações sobre o evento, veja mais detalhes aqui:

A Locaweb está partocinando o evento e você pode fazer sua inscrição aqui:

No mesmo site da inscrição contém os valores, os palestrantes, o local… Tudo sobre o evento.

Eu já fiz a minha incrição e estarei lá com certeza. Você já fez a sua?

  • Share/Bookmark