ruby on rails enecomp 2008

113
1 Ruby on Rails Allisson Azevedo - http://allisson.eti.br

Upload: allisson-azevedo

Post on 13-Jan-2015

1.749 views

Category:

Technology


0 download

DESCRIPTION

Minicurso ministrado no Enecomp 2008

TRANSCRIPT

Page 1: Ruby on Rails Enecomp 2008

1

Ruby on Rails

Allisson Azevedo - http://allisson.eti.br

Page 2: Ruby on Rails Enecomp 2008

2

Sobre o Instrutor

Allisson Azevedo - http://allisson.eti.br Concluinte do curso de Licenciatura em

Computação – UEPB Àreas de Interesse:

– Desenvolvimento Web– Redes (Arquitetura, Segurança)– Sistemas Operacionais (Linux,

FreeBSD)– Cloud Computing

Page 3: Ruby on Rails Enecomp 2008

3

Agenda

I. Conhecendo RubyII.Conhecendo RailsIII.Desenvolvendo em RailsIV.Deployment de RailsV.Futuro do Rails

Page 4: Ruby on Rails Enecomp 2008

4

I - Conhecendo Ruby

Allisson Azevedo - http://allisson.eti.br

Page 5: Ruby on Rails Enecomp 2008

5

Ruby - http://www.ruby-lang.org

Page 6: Ruby on Rails Enecomp 2008

6

Ruby - Definição

A dynamic, open source programming language with a focus on simplicity and productivity. It has an elegant syntax that is natural to read and easy to write.

Page 7: Ruby on Rails Enecomp 2008

7

Ruby - Histórico

Criado por Yukihiro “Matz” Matsumoto Objetivos

– Ser um Perl melhorado– Mais OO do que Python

1993: Começo do desenvolvimento 1995: Versão 0.95 disponível 1996: Versão 1.0 disponível 1998: Site traduzido para inglês

Page 8: Ruby on Rails Enecomp 2008

8

Ruby – Histórico (Cont)

1999:– Matz publica o primeiro livro– Ruby Workshop

2000: InformIT publica entrevista com Matz

2001:– Programming Ruby (Pickaxe)– Rubyconf.new

2003: Versão 1.8.0 lançada

Page 9: Ruby on Rails Enecomp 2008

9

Ruby – Histórico (Cont)

2004: O Framework Rails é lançado– Killer App de Ruby– Grande interesse por Ruby– Muitos livros publicados

2007: Versão 1.8.6 lançada 2008: Versão 1.8.7 lançada

Page 10: Ruby on Rails Enecomp 2008

10

Ruby segundo o TIOBE

Page 11: Ruby on Rails Enecomp 2008

11

Ruby - Características

Opensource (GPLv2) Feita para humanos

– Fácil de ler e escrever– Poderosa– Divertida

Interpretador multiplataforma– Windows, DOS– Linux, *BSD, MacOSX– BeOS– OS/2

Page 12: Ruby on Rails Enecomp 2008

12

Ruby – Características (Cont)

Orientada a objeto– Tudo é um objeto!

Tipagem Dinâmica Tipagem Forte Garbage collector

– Mark-and-sweep Tratamento de exceções Blocks (closures) Módulos (mix-in)

Page 13: Ruby on Rails Enecomp 2008

13

Ruby – IRB

Interactive Ruby Console interativo para testar códigos

simples em Ruby Muito utilizado nesses slides

Page 14: Ruby on Rails Enecomp 2008

14

Ruby - IRB

Page 15: Ruby on Rails Enecomp 2008

15

Ruby – Hello World

Page 16: Ruby on Rails Enecomp 2008

16

Ruby – Tipagem Dinâmica

Page 17: Ruby on Rails Enecomp 2008

17

Ruby – Tipagem Forte

Page 18: Ruby on Rails Enecomp 2008

18

Ruby – Métodos de um objeto

Page 19: Ruby on Rails Enecomp 2008

19

Ruby – Tipos

String Number Array Symbol Hash

Page 20: Ruby on Rails Enecomp 2008

20

Ruby – Strings

Strings são definidas usando aspas simples ou duplas

As aspas duplas permitem que você utilize o conteúdo de uma variável na string

Page 21: Ruby on Rails Enecomp 2008

21

Ruby – Strings (Cont)

Page 22: Ruby on Rails Enecomp 2008

22

Ruby – Number

Existem três tipos principais para representar números

Float– Ponto flutuante

Fixnum– Inteiros pequenos

Bignum– Inteiros grandes

Page 23: Ruby on Rails Enecomp 2008

23

Ruby – Number (Cont)

Page 24: Ruby on Rails Enecomp 2008

24

Ruby – Arrays

Contém uma coleção de objetos Os objetos podem ser de tipos diferentes Os objetos são acessados pelo seu index

Page 25: Ruby on Rails Enecomp 2008

25

Ruby – Arrays (Cont)

Page 26: Ruby on Rails Enecomp 2008

26

Ruby – Symbol

Pode ser utilizado no lugar de strings e vice-versa

Razões para usar symbol no lugar de string:– Se ocorrer a repetição da mesma string

1000 vezes, vai ser ocupado 1000 vezes o espaço de memória dessa string

Para declarar um symbol, usamos “:” antes do nome– :simbolo1, :simbolo2

Page 27: Ruby on Rails Enecomp 2008

27

Ruby – Symbol (Cont)

Usos de symbol em Ruby:– Hash keys

hash = {:nome => 'Allisson}– Argumento para métodos

meu_metodo(:valor1,:valor2)

Page 28: Ruby on Rails Enecomp 2008

28

Ruby – Symbol (Cont)

Page 29: Ruby on Rails Enecomp 2008

29

Ruby – Hashes

São arrays que possuem a estrutura de chave/valor

Não permite duplicação de chaves Geralmente utiliza symbols como chaves

Page 30: Ruby on Rails Enecomp 2008

30

Ruby – Hashes (Cont)

Page 31: Ruby on Rails Enecomp 2008

31

Ruby – Hashes (Cont)

Page 32: Ruby on Rails Enecomp 2008

32

Ruby – Classes

Todo objeto em Ruby possui sua própria classe

Para descobrir a classe do objeto utilize a construção objeto.class

Page 33: Ruby on Rails Enecomp 2008

33

Ruby – Classes (Cont)

Page 34: Ruby on Rails Enecomp 2008

34

Ruby – Classes (Cont)

Page 35: Ruby on Rails Enecomp 2008

35

Ruby – Classes (Cont)

Page 36: Ruby on Rails Enecomp 2008

36

Ruby – Herança

Uma classe filha pode herdar toda a estrutura e variáveis de uma classe mãe

Ruby possui herança única (de propósito)

Page 37: Ruby on Rails Enecomp 2008

37

Ruby – Herança (Cont)

Page 38: Ruby on Rails Enecomp 2008

38

Ruby – Herança (Cont)

Page 39: Ruby on Rails Enecomp 2008

39

Ruby – Variáveis

Locais– Existem nos limites do método– variavel_local = 10

Globais– Acessível em qualquer parte do

programa– $variavel_global = 10

Page 40: Ruby on Rails Enecomp 2008

40

Ruby – Variáveis (Cont)

Instância– Implementam os atributos de uma

classe, acessível dentro da classe– @variavel_instancia = 10

Classe– São compartilhadas entre todos os

objetos dessa classe– @@variavel_classe = 10

Page 41: Ruby on Rails Enecomp 2008

41

Ruby – Variáveis (Cont)

Page 42: Ruby on Rails Enecomp 2008

42

Ruby – Variáveis (Cont)

Page 43: Ruby on Rails Enecomp 2008

43

Ruby – Blocks

São funções anônimas que podem ser passadas como parâmetros para um método

Delimitados por “{}” ou “do end”– “{}” para blocos de uma linha– “do end” para blocos com mais de uma

linha Para criar métodos que recebam blocos,

use a instrução yield no corpo do método

Page 44: Ruby on Rails Enecomp 2008

44

Ruby – Blocks (Cont)

Page 45: Ruby on Rails Enecomp 2008

45

Ruby – Blocks (Cont)

Page 46: Ruby on Rails Enecomp 2008

46

Ruby – Blocks (Cont)

Page 47: Ruby on Rails Enecomp 2008

47

Ruby – Modules

Módulos seguem o mesmo padrão de classes, exceto:– Não possui instâncias– Não possui subclasses

Um módulo serve como uma localização central para que sejam agregados métodos e constantes

Page 48: Ruby on Rails Enecomp 2008

48

Ruby – Modules (Cont)

Módulos em Ruby são utilizados para dois propósitos básicos:– Permitir que seja definido um método

que não entre em conflito com outro já definido com mesmo nome

– Compartilhar funcionalidades entre classes (pseudo herança múltipla)

Page 49: Ruby on Rails Enecomp 2008

49

Ruby – Modules (Cont)

Page 50: Ruby on Rails Enecomp 2008

50

Ruby – Modules (Cont)

Page 51: Ruby on Rails Enecomp 2008

51

Ruby – Modules (Cont)

Page 52: Ruby on Rails Enecomp 2008

52

Ruby – Modules (Cont)

Page 53: Ruby on Rails Enecomp 2008

53

Ruby – Modules (Cont)

Page 54: Ruby on Rails Enecomp 2008

54

Ruby – RubyGems

É um sistema de gerenciamento de bibliotecas em Ruby

A bibliotecas são disponibilizadas no formato .gem

Resolução de dependências Várias versões da mesma gem no sistema Maneira recomendada de instalar

bibliotecas (inclusive o Rails)– gem install rails

Page 55: Ruby on Rails Enecomp 2008

55

II - Conhecendo Rails

Allisson Azevedo - http://allisson.eti.br

Page 56: Ruby on Rails Enecomp 2008

56

Histórico Desenvolvimento Web

Começo: Páginas estáticas 1993: Common Gateway Interface 1995: PHP 1996: ASP 1997: Java Servlet 1.0 2002: .Net 2004: Ruby on Rails

Page 57: Ruby on Rails Enecomp 2008

57

37 Signals

Jason Fried David Heinemeier Hansson Basecamp Getting the real

– Less is more

Page 58: Ruby on Rails Enecomp 2008

58

Ruby on Rails

Framework para desenvolvimento web– Full stack

Full stack vs Glue Criado por David Heinemeier Hansson

(2004) Extraído do aplicativo Basecamp MVC (Model-View-Controller) Código aberto, sem restrições

Page 59: Ruby on Rails Enecomp 2008

59

Ruby on Rails - Releases

2005: 1.0.0 2006: 1.1.0 2007:

– 1.2.0– 2.0.0

2008: 2.1.0

Page 60: Ruby on Rails Enecomp 2008

60

Rails - Conceitos

MVC– Model

Regras de negócio (persistência de dados)

– View Interação com usuário (templates

renderizados para html)– Controller

Controle da lógica e fluxo de dados

Page 61: Ruby on Rails Enecomp 2008

61

Rails – Conceitos (Cont)

DRY (Don't repeat yourself)– Desconfie se estiver utilizando o copiar

e colar em excesso Testing

– Suíte de testes integrada– Ideal 100% de cobertura de testes

Abstração utilizando código Ruby– SQL– Javascript

Page 62: Ruby on Rails Enecomp 2008

62

Rails – Conceitos (Cont)

Convention over configuration– Utilize as convenções e esqueça

configuração– Menos código– Menos erros– Mais fácil de manter

Page 63: Ruby on Rails Enecomp 2008

63

Rails – Funcionamento

Page 64: Ruby on Rails Enecomp 2008

64

Rails – Pacotes

O Rails é composto de um série de pacotes (frameworks)

Cada pacote resulta em um .gem separado

Pacotes– ActionMailer, ActionPack, ActiveRecord,

ActiveSupport e ActiveResource

Page 65: Ruby on Rails Enecomp 2008

65

Rails – ActionMailer

Responsável pelas tarefas relacionadas a envio e recebimento de emails

Page 66: Ruby on Rails Enecomp 2008

66

Rails – ActionPack

É composto de duas partes: ActionController

– Responsável pela lógica/fluxo de dados ActionView

– Responsável pela interação com usuário (html, css, ajax)

Page 67: Ruby on Rails Enecomp 2008

67

Rails – ActiveRecord

É o ORM (object-relation mapping) do Rails

Conecta as regras de negócios com banco de dados– Persistência de dados– Create– Read– Update– Delete/Destroy

Page 68: Ruby on Rails Enecomp 2008

68

Rails – ActiveRecord (Cont)

Migrations– Permite que mudanças em tabelas de

banco de dados sejam geridas por código RubyFacilidade Independência

Page 69: Ruby on Rails Enecomp 2008

69

Rails – ActiveSupport

Coleção de várias bibliotecas que servem de apoio para o Rails– Operações com datas– Timezone– Json– Etc

Page 70: Ruby on Rails Enecomp 2008

70

Rails – ActiveResource

Consome webservices no padrão REST– Atua como um ORM para webservices

REST

Page 71: Ruby on Rails Enecomp 2008

71

Rails – Plugins

Permitem adicionar novas funcionalidades a um projeto Rails

Muitos plugins disponíveis (>800)– acts_as_taggable_on_steroids– will_paginate– restful_authentication– attachment_fu– brazilian_rails

Page 72: Ruby on Rails Enecomp 2008

72

Rails – Rake

Programa responsável por executar tarefas pré-definidas– Criar e modificar tabelas com

migrations– Rodar suíte de testes– Etc

Page 73: Ruby on Rails Enecomp 2008

73

Rails – Estrutura de diretório

Page 74: Ruby on Rails Enecomp 2008

74

III - Desenvolvendo em Rails

Allisson Azevedo - http://allisson.eti.br

Page 75: Ruby on Rails Enecomp 2008

75

Instalação - Windows

One-Click Installer– http://rubyforge.org/projects/rubyinstaller/– Ruby, RubyGems, etc

Instant Rails– http://instantrails.rubyforge.org/– Ruby, Rails, RubyGems, Apache,

MySQL, etc

Page 76: Ruby on Rails Enecomp 2008

76

Instalação - Linux

Fedora:– yum install ruby ruby-devel ruby-irb ruby-

rdoc ruby-ri rubygems Ubuntu:

– sudo apt-get install ruby rdoc irb libyaml-ruby libzlib-ruby ri libopenssl-ruby ruby1.8-dev build-essential rubygems

Page 77: Ruby on Rails Enecomp 2008

77

Instalação – Rails

É recomendável usar o RubyGems para instalar o rails– gem install rails -y

Page 78: Ruby on Rails Enecomp 2008

78

Instalação – Adaptadores BD

Depois é preciso instalar a biblioteca para interação com seu banco de dados

Sqlite3: gem install sqlite3-ruby– Instalar o pacote de desenvolvimento do

sqlite antes MySQL: gem install mysql

– Instalar o pacote de desenvolvimento do mysql antes

Page 79: Ruby on Rails Enecomp 2008

79

Instalação – Mongrel

Servidor http que roda sobre o Rails Muito superior ao servidor http padrão

(webrick) gem install mongrel

Page 80: Ruby on Rails Enecomp 2008

80

Editor de código

Netbeans 6 Aptana RadRails Qualquer editor simples com syntax

highlight:– Gedit– Vim– Notepad++

Page 81: Ruby on Rails Enecomp 2008

81

Iniciando um projeto

Sempre do mesmo jeito– rails projeto (Sqlite)– rails projeto -d mysql

Page 82: Ruby on Rails Enecomp 2008

82

Demonstração

Mão na massa!

Page 83: Ruby on Rails Enecomp 2008

83

IV - Deployment de Rails

Allisson Azevedo - http://allisson.eti.br

Page 84: Ruby on Rails Enecomp 2008

84

O que é deployment?

É o trabalho necessário para publicar o código fonte do seu website em ambiente de produção– Botar no ar!

Page 85: Ruby on Rails Enecomp 2008

85

Deployment - Arquitetura

É preciso pensar em uma arquitetura de deployment que permita que o aplicativo “escale”– Escalabilidade vs Performance– Polêmica do Twitter

Rails escala?

Page 86: Ruby on Rails Enecomp 2008

86

Deployment – Arquitetura (Cont)

Page 87: Ruby on Rails Enecomp 2008

87

Deployment - 2005

Proxy reverso– Apache

WebApp– Rails + LightTPD

FastCGI Database

– MySQL

Page 88: Ruby on Rails Enecomp 2008

88

Deployment – 2005 (Cont)

Page 89: Ruby on Rails Enecomp 2008

89

Deployment - Atualmente

Proxy reverso– Nginx, Apache

WebApp– Rails + Mongrel

HTTP Database

– MySQL + MEMCACHED

Page 90: Ruby on Rails Enecomp 2008

90

Deployment – Atualmente (Cont)

Page 91: Ruby on Rails Enecomp 2008

91

Deployment - Capistrano

Automatiza tarefas via SSH em servidores remotos– Instalação de software– Deployment de aplicações– Gerenciamento de configuração

Feito em Ruby Programável em Ruby

Page 92: Ruby on Rails Enecomp 2008

92

Deployment – Capistrano (Cont)

Page 93: Ruby on Rails Enecomp 2008

93

Deployment - Monit

Utilitário para monitorar processos, arquivos, diretórios e filesystem de sistemas UNIX

Monitorar o mongrel– Evitar consumo excessivo de memória

Se passar de certo consumo, reinicie o processo

Page 94: Ruby on Rails Enecomp 2008

94

Deployment – Fusion Passenger

mod_rails A grande novidade em deployment no

mundo Rails Funcionamento semelhante ao mod_php

– Popularização em shared hostingsSubstituto do FastCGI

– Apenas upload dos arquivos para funcionar

Page 95: Ruby on Rails Enecomp 2008

95

V – Futuro do Rails

Allisson Azevedo - http://allisson.eti.br

Page 96: Ruby on Rails Enecomp 2008

96

JRuby

Implementação de Ruby em Java Versão atual: 1.1.3 Rails funcionando na JVM

Page 97: Ruby on Rails Enecomp 2008

97

IronRuby

Implementação do Ruby em .Net Ainda em beta Passou em cerca de 71% dos testes para

rodar Rails

Page 98: Ruby on Rails Enecomp 2008

98

Rubinius

É uma nova VM para Ruby Compatível com MRI (Matz Ruby

Interpreter) Ainda em beta

Page 99: Ruby on Rails Enecomp 2008

99

Influência do Rails

Page 100: Ruby on Rails Enecomp 2008

100

Influência do Rails (Cont)

Page 101: Ruby on Rails Enecomp 2008

101

Influência do Rails (Cont)

Page 102: Ruby on Rails Enecomp 2008

102

Influência do Rails (Cont)

Page 103: Ruby on Rails Enecomp 2008

103

Sites Feitos em Rails

Page 104: Ruby on Rails Enecomp 2008

104

Sites Feitos em Rails (Cont)

Page 105: Ruby on Rails Enecomp 2008

105

Sites Feitos em Rails (Cont)

Page 106: Ruby on Rails Enecomp 2008

106

Sites Feitos em Rails (Cont)

Page 107: Ruby on Rails Enecomp 2008

107

Sites Feitos em Rails (Cont)

Page 108: Ruby on Rails Enecomp 2008

108

Sites Feitos em Rails (Cont)

Page 109: Ruby on Rails Enecomp 2008

109

Sites Feitos em Rails (Cont)

Page 110: Ruby on Rails Enecomp 2008

110

Sites Feitos em Rails (Cont)

Page 111: Ruby on Rails Enecomp 2008

111

Sites Feitos em Rails (Cont)

Page 112: Ruby on Rails Enecomp 2008

112

Desafios

Ruby– Melhora de performance

Rails– Deployment mais simples

Page 113: Ruby on Rails Enecomp 2008

113

Obrigado!

http://allisson.eti.br [email protected]