ruby on rails enecomp 2008

Post on 13-Jan-2015

1.749 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Minicurso ministrado no Enecomp 2008

TRANSCRIPT

1

Ruby on Rails

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

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

3

Agenda

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

4

I - Conhecendo Ruby

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

5

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

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.

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

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

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

10

Ruby segundo o TIOBE

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

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)

13

Ruby – IRB

Interactive Ruby Console interativo para testar códigos

simples em Ruby Muito utilizado nesses slides

14

Ruby - IRB

15

Ruby – Hello World

16

Ruby – Tipagem Dinâmica

17

Ruby – Tipagem Forte

18

Ruby – Métodos de um objeto

19

Ruby – Tipos

String Number Array Symbol Hash

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

21

Ruby – Strings (Cont)

22

Ruby – Number

Existem três tipos principais para representar números

Float– Ponto flutuante

Fixnum– Inteiros pequenos

Bignum– Inteiros grandes

23

Ruby – Number (Cont)

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

25

Ruby – Arrays (Cont)

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

27

Ruby – Symbol (Cont)

Usos de symbol em Ruby:– Hash keys

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

meu_metodo(:valor1,:valor2)

28

Ruby – Symbol (Cont)

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

30

Ruby – Hashes (Cont)

31

Ruby – Hashes (Cont)

32

Ruby – Classes

Todo objeto em Ruby possui sua própria classe

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

33

Ruby – Classes (Cont)

34

Ruby – Classes (Cont)

35

Ruby – Classes (Cont)

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)

37

Ruby – Herança (Cont)

38

Ruby – Herança (Cont)

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

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

41

Ruby – Variáveis (Cont)

42

Ruby – Variáveis (Cont)

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

44

Ruby – Blocks (Cont)

45

Ruby – Blocks (Cont)

46

Ruby – Blocks (Cont)

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

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)

49

Ruby – Modules (Cont)

50

Ruby – Modules (Cont)

51

Ruby – Modules (Cont)

52

Ruby – Modules (Cont)

53

Ruby – Modules (Cont)

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

55

II - Conhecendo Rails

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

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

57

37 Signals

Jason Fried David Heinemeier Hansson Basecamp Getting the real

– Less is more

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

59

Ruby on Rails - Releases

2005: 1.0.0 2006: 1.1.0 2007:

– 1.2.0– 2.0.0

2008: 2.1.0

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

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

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

63

Rails – Funcionamento

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

65

Rails – ActionMailer

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

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)

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

68

Rails – ActiveRecord (Cont)

Migrations– Permite que mudanças em tabelas de

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

69

Rails – ActiveSupport

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

70

Rails – ActiveResource

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

REST

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

72

Rails – Rake

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

migrations– Rodar suíte de testes– Etc

73

Rails – Estrutura de diretório

74

III - Desenvolvendo em Rails

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

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

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

77

Instalação – Rails

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

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

79

Instalação – Mongrel

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

(webrick) gem install mongrel

80

Editor de código

Netbeans 6 Aptana RadRails Qualquer editor simples com syntax

highlight:– Gedit– Vim– Notepad++

81

Iniciando um projeto

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

82

Demonstração

Mão na massa!

83

IV - Deployment de Rails

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

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!

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?

86

Deployment – Arquitetura (Cont)

87

Deployment - 2005

Proxy reverso– Apache

WebApp– Rails + LightTPD

FastCGI Database

– MySQL

88

Deployment – 2005 (Cont)

89

Deployment - Atualmente

Proxy reverso– Nginx, Apache

WebApp– Rails + Mongrel

HTTP Database

– MySQL + MEMCACHED

90

Deployment – Atualmente (Cont)

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

92

Deployment – Capistrano (Cont)

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

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

95

V – Futuro do Rails

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

96

JRuby

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

97

IronRuby

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

rodar Rails

98

Rubinius

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

Interpreter) Ainda em beta

99

Influência do Rails

100

Influência do Rails (Cont)

101

Influência do Rails (Cont)

102

Influência do Rails (Cont)

103

Sites Feitos em Rails

104

Sites Feitos em Rails (Cont)

105

Sites Feitos em Rails (Cont)

106

Sites Feitos em Rails (Cont)

107

Sites Feitos em Rails (Cont)

108

Sites Feitos em Rails (Cont)

109

Sites Feitos em Rails (Cont)

110

Sites Feitos em Rails (Cont)

111

Sites Feitos em Rails (Cont)

112

Desafios

Ruby– Melhora de performance

Rails– Deployment mais simples

113

Obrigado!

http://allisson.eti.br allisson@gmail.com

top related