SlideShare uma empresa Scribd logo
1 de 112
Baixar para ler offline
Desenvolvimento
Web com Ruby on
Rails
João Lucas Pereira de Santana
gtalk | linkedin | twitter: jlucasps
Agenda
● Origem do framework
● Por que aprender Ruby on Rails
● A linguagem Ruby
● Ruby on Rails full stack
● Aplicação Básica
● Versionamento com Git
● Configuração de Assets
● Deploy na Heroku
@jlucasps
Origem
@jlucasps
Open source desde 2004
David Heinemeier Hansson
Origem
@jlucasps
Rails Core Team
Jeremy Kemper Michael Koziarski Yehuda Katz José Valim
Santiago Pastorino Aaron Patterson Xavier Noria Jon Leighton
Rafael França Andrew White Guillermo Iguaran Carlos Antonio
Origem
Escrito em Ruby
Yukihiro Matsumoto
@jlucasps
Testes
Testes
Testes
Origem
Framework para desenvolvimento de apps
Web seguindo o padrão MVC (Model-View-
Controller)
@jlucasps
Model View
Controller
HTTP/SSL
Routes
Helpers
Middleware
Responders
Renders
Session
Logs
Associations
Validations
Queries
Callbacks
Connections
Migrations
Assets
Helpers
Builders
Templates
Partials
Por que aprender Ruby on Rails?
O que vocês me dizem?
@jlucasps
Por que aprender Ruby on Rails?
@jlucasps
● Tecnologia
○ Implementado na Linguagem Ruby
○ Linguagem Interpretada
○ Orientada a Objetos
○ Sintaxe bastante inspirada em Perl e Lisp
Ruby foi desenvolvida por Yukihiro ‘Matz’
Matsumoto, e lançada em 1995
É uma linguagem Orientada a Objetos de
tipagem forte e dinânima
Características principais:
Por que aprender Ruby on Rails?
@jlucasps
Simplicidade
do código
escrito
Poder do
código gerado
Por que aprender Ruby on Rails?
Ruby foi construída com base em duas simples
idéias:
@jlucasps
O código deve ser bastante claro
O código deve ser conciso
Código simples, efetivo e fazer exatamente o
que ele se propõe a fazer.
Por que aprender Ruby on Rails?
Ruby foi pensada para ser uma linguagem
divertida de usar (joy to use)
@jlucasps
Por que aprender Ruby on Rails?
● Além de uma linguagem de muito alto
nível;
● Ruby é extremamente poderosa;
● Versátil;
● Mantendo um equilíbrio entre clareza e
performance.
@jlucasps
Por que aprender Ruby on Rails?
O primeiro interpretador para Ruby (MRI -
Matz’s Ruby Interpreter) foi escrito em C.
Atualmente existem versões compatíveis com
outras plataformas:
@jlucasps
Por que aprender Ruby on Rails?
● Estrutura do framework
○ Camada de persistência independente
@jlucasps
Por que aprender Ruby on Rails?
● Conventions over Configurations (CoC)
@jlucasps
Por que aprender Ruby on Rails?
Segue o padrão MVC
@jlucasps
Model View
Controller
Separação de interesses entre as
camadas da aplicação
Isolamento das regras de negócio,
evitando duplicação e facilitando a
manutenção do código
Amplamente conhecido
Por que aprender Ruby on Rails?
@jlucasps
Model View
Controller
Model
Representa as entidades:
Document, User, Account, Picture
encapsula as regras de negócio
específicas da sua aplicação
extensões de ActiveRecord::Base
representam entradas do banco de dados acoplados com
definições das regras do negócio
Por que aprender Ruby on Rails?
@jlucasps
Model View
Controller
Controller
Responder a requisições HTTP
enviadas ao servidor
retornar arquivos HTML para o
usuário que efetuou a requisição
XML, JSON, PDF, JavaScript
manipulam MODELS e renderizam VIEWS com objetivo
de gerar uma resposta apropriada ao usuário.
Por que aprender Ruby on Rails?
@jlucasps
Model View
Controller
View
Arquivos HTML com código Ruby
embutido (Embedded Ruby - .erb
files)
Fornecem uma apresentação apropriada das entidades da
sua aplicação
Haml, JavaScript
Por que aprender Ruby on Rails?
● Implementação RESTful (Representational
State Transfer)
○ Mecanismos para facilitar a implementação das
regras de negócios, representando-as como
transições de estados das entidades do sistema
○ Login/logout da gem Devise:
■ create session
■ destroy session
@jlucasps
Por que aprender Ruby on Rails?
Gerenciador de dependências Bundler
@jlucasps
Assegura quais versões são necessárias para
sua aplicação, bem como resolução de
dependência entre elas
Por que aprender Ruby on Rails?
Dependências em uma aplicação simples
@jlucasps
Por que aprender Ruby on Rails?
Testes automatizados
@jlucasps
Por que aprender Ruby on Rails?
● Configurações de DEV, TST, STG, PRD
● Deploy
@jlucasps
Por que aprender Ruby on Rails?
Valor de Negócio
@jlucasps
+ foco no negócio
- código
Rápida resposta a
mudanças no negócio
Por que aprender Ruby on Rails?
Muitas gems, mas muitas mesmo
rubygems.org e ruby-toolbox.com
@jlucasps
jquery-rails
pg
mailcatcher
devise
aws-sdk
friendly_id
rmagick
delayed_job
jquery-fileupload-rails
tiny-mce
will_paginate
meta-search
i18n-js
i18n
guard-test
lol-dba
capybara
rspec
factory-girl
simple-cov
better_errors
A linguagem Ruby
Abra o terminal e execute o interpretador Ruby
@jlucasps
$ irb-ruby-1.9.3-p392
irb(main):001:0>
Entre com algum comando e pressione enter
para que seja executado.
irb(main):001:0> 4 + 6
=> 10
A linguagem Ruby
Observe que o interpretador reconhece
números e expressões matemáticas.
@jlucasps
irb(main):002:0> 10 / 5
=> 2
irb(main):003:0> 8 * 2
=> 16
irb(main):004:0> (57 - 4) * (3 * 9)
=> 1431
irb(main):005:0> 3 ** 2
=> 9
irb(main):006:0> 5 / 2
=> 2
A linguagem Ruby
@jlucasps
irb(main):007:0> "João Lucas"
=> "João Lucas"
Vamos avaliar alguns valores em forma de texto
Digite seu nome no interpretador entre aspas (”).
Agora vamos verificar algumas funções
existentes em objetos desse tipo.
irb(main):020:0> "João Lucas".reverse
=> "sacuL oãoJ"
A linguagem Ruby
@jlucasps
Teste outros métodos existentes em objetos String
irb(main):021:0> "João Lucas".length
=> 10
irb(main):024:0> " abc " + " 123 "
=> " abc 123 "
irb(main):026:0> "Hey Jude, " + "na "*3
=> "Hey Jude, na na na "
irb(main):029:0> "João Lucas".upcase
=> "JOãO LUCAS"
irb(main):030:0> "João Lucas".downcase
=> "joão lucas"
A linguagem Ruby
@jlucasps
irb(main):034:0> "está ficando legal isso aqui".capitalize
=> "Está ficando legal isso aqui"
irb(main):036:0> "está ficando legal isso aqui".split
=> ["está", "ficando", "legal", "isso", "aqui"]
irb(main):037:0> "está ficando legal isso aqui".split('l')
=> ["está ficando ", "ega", " isso aqui"]
irb(main):038:0> "está ficando legal isso aqui".split('a')
=> ["está fic", "ndo leg", "l isso ", "qui"]
A linguagem Ruby
@jlucasps
E o que acontece se tentarmos executar em
números alguns métodos existentes em Strings?
irb(main):039:0> 40.reverse
Qual a resposta exibida?
NoMethodError: undefined method `reverse' for 40:Fixnum
from (irb):39
from /home/jlucasps/.rvm/rubies/ruby-1.9.3-p392/bin/irb:13:in `<main>'
A linguagem Ruby
@jlucasps
E para o comando:
irb(main):040:0> "40".reverse
Você consegue explicar por que a saída é:
irb(main):040:0> "40".reverse
=> "04"
A linguagem Ruby
@jlucasps
Nem todos os objetos Ruby implementam os
mesmos métodos.
No entanto, existe a possibilidade de converter
objetos de um tipo para outro.
irb(main):042:0> 40 + 10
=> 50
irb(main):044:0> 40.to_s + 10.to_s
=> "4010"
A linguagem Ruby
@jlucasps
O interpretador também permite trabalharmos
com listas (Arrays)
irb(main):047:0> [2, 4, 6, 8, 10]
=> [2, 4, 6, 8, 10]
Listas também possuem algumas funções
interessantes
irb(main):048:0> [2, 4, 6, 8, 10].min
=> 2
irb(main):049:0> [2, 4, 6, 8, 10].max
=> 10
A linguagem Ruby
@jlucasps
E se não quisermos ter o trabalho de repetir todos
esses números a cada execução?
irb(main):053:0> even = [2, 4, 6, 8, 10]
=> [2, 4, 6, 8, 10]
irb(main):054:0> even.min
=> 2
Basta armazenarmos em uma variável
A linguagem Ruby
@jlucasps
Armazenando os objetos em variáveis, podemos
trabalhar mais facilmente
irb(main):056:0> even.shuffle
=> [10, 4, 2, 8, 6]
irb(main):058:0> even = even.shuffle
=> [2, 8, 6, 4, 10]
irb(main):059:0> even.sort
=> [2, 4, 6, 8, 10]
irb(main):089:0> even.push(12)
=> [2, 8, 6, 4, 10, 12]
irb(main):090:0> even[6] = 14
=> 14
irb(main):103:0> even
=> [2, 8, 6, 4, 10, 12, 14]
A linguagem Ruby
@jlucasps
Alguém sabe porquê o método pop funciona de
modo diferente para uma lista em ordem normal
e uma lista em ordem reversa?
irb(main):103:0> even
=> [2, 8, 6, 4, 10, 12, 14]
irb(main):104:0> even.pop
=> 14
irb(main):106:0> even
=> [2, 8, 6, 4, 10, 12]
irb(main):107:0> even.reverse.pop
=> 2
irb(main):108:0> even
=> [2, 8, 6, 4, 10, 12]
A linguagem Ruby
@jlucasps
A explicação pode ser encontrada executando o
código abaixo
irb(main):110:0> even.object_id
=> 8472880
irb(main):111:0> even.reverse.object_id
=> 9555820
A linguagem Ruby
@jlucasps
E se quisermos substituir uma pequena parte de
um texto maior?
irb(main):070:0> text = "Ticking away the moments that make up a dull day. You
fritter and waste the hours in an off hand way"
=> "Ticking away the moments that make up a dull day. You fritter and waste the
hours in an off hand way"
irb(main):071:0> text["dull"] = "great"
=> "great"
irb(main):072:0> text
=> "Ticking away the moments that make up a great day. You fritter and waste the
hours in an off hand way"
A linguagem Ruby
@jlucasps
Um característica interessante da implementação
de Ruby é a fácil leitura do código
=> "Kicking around on a piece of ground in your home town"
irb(main):076:0> text.include?("home")
=> true
irb(main):077:0> text.include?("my home")
=> false
irb(main):084:0> text.include? "black"
=> true
A linguagem Ruby
@jlucasps
Além de números, Strings e Arrays, quais outras
estruturas de dados temos em Ruby?
irb(main):086:0> songs = {}
=> {}
O processo de inserção de valores em um Hash é
semelhante a inserção em Arrays
irb(main):114:0> songs[:good] = "Stairway to Heaven"
=> "Stairway to Heaven"
irb(main):115:0> songs[:horrible] = "Boquinha da garrafa"
=> "Boquinha da garrafa"
A linguagem Ruby
@jlucasps
Agora vamos conhecer outras estruturas não
muito conhecidas
irb(main):129:0> all = ""
=> ""
irb(main):134:0> songs.values.each {|value| all += value + ", " }
=> ["Stairway to Heaven", "Boquinha da garrafa"]
irb(main):135:0> all
=> "Stairway to Heaven, Boquinha da garrafa, "
A linguagem Ruby
@jlucasps
Acabamos de usar uma estrutura chamada Block.
Vamos executar um outro teste mais simples,
para facilitar a visualização
irb(main):136:0> 5.times {puts "ihhhhrrrraaaaa"}
ihhhhrrrraaaaa
ihhhhrrrraaaaa
ihhhhrrrraaaaa
ihhhhrrrraaaaa
ihhhhrrrraaaaa
=> 5
A linguagem Ruby
@jlucasps
Nos exemplo anteriores, usamos uma estrutura
não muito comum para identificar as chaves do
Hash, chamada Symbol.
Symbols são criados utilizando-se as sintaxes :
name ou :”name”
Um mesmo Symbol será criado para um dado
nome enquanto durar a execução do programa,
independente do contexto.
@jlucasps
A linguagem Ruby
module One
class Fred
end
$f1 = :Fred
end
module Two
Fred = 1
$f2 = :Fred
end
def Fred()
end
$f3 = :Fred
irb(main):186:0> $f1.object_id
=> 463148
irb(main):187:0> $f2.object_id
=> 463148
irb(main):188:0> $f3.object_id
=> 463148
A linguagem Ruby
@jlucasps
Por enquanto, trabalhamos apenas com objetos
existentes na linguagem Ruby. E se precisarmos
criar nossos próprios objetos?
Para criar objetos, precisamos implementar
classes.
Classes são estruturas que definem quais
infomormaçãoes serão armazenadas nos objetos,
a quais métodos devem responder e quais os
comportamentos.
A linguagem Ruby
@jlucasps
class Document
attr_accessor :title, :author, :content
def initialize(title, author, content)
@title = title
@author = author
@content = content
end
def words
@content.split
end
def word_count
words.size
end
end
A linguagem Ruby
@jlucasps
Execute o interpretador ruby no mesmo diretório
onde o arquivo foi salvo
$ irb-ruby-1.9.3-p392
Importe o arquivo para que ele seja lido pelo
interpretador e fique disponível para utilização
irb(main):001:0> require './document'
=> true
A linguagem Ruby
@jlucasps
Definimos a classe Document com algumas
informações e comportamentos.
Em linguagens Orientadas a Objetos, as classes
servem como “fabricantes”, ou “moldes” de
objetos, é a partir delas que os objetos são criados.
Além disso, as classes definem quais as
informações, ou atributos, os objetos criados a
partir daquela classe devem ter.
A linguagem Ruby
@jlucasps
Os atributos são definidos pela instrução
...
attr_accessor :title, :author, :content
...
O termo attr_accessor é uma abreviação para
‘attribute accessor’, que define que os atributos
serão acessíveis nos objetos daquela classe
A linguagem Ruby
@jlucasps
Nossa classe Document também define três
métodos, e um deles tem um comportamento
especial.
Em Ruby, o construtor é sempre o método
initialize.
Na nossa implementação, precisamos de três
informações para criar objetos do tipo
Document, são elas: title, author, content.
A linguagem Ruby
@jlucasps
Além do construtor, definimos outros dois
métodos (words e word_count) na classe
Document.
Estes métodos são responsáveis por implementar
comportamentos adicionais dos objetos do tipo
Document.
A linguagem Ruby
@jlucasps
Para instruirmos a classe Document a criar
objetos, executamos uma chamada ao construtor
e passamos as informações requeridas.
irb(main):002:0> doc = Document.new "Ruby Tutorial", "Joao
Lucas", "This is a content of document."
=> #<Document:0x00000001074968 @title="Ruby Tutorial",
@author="Joao Lucas", @content="This is a content of
document.">
A linguagem Ruby
@jlucasps
Uma vez que o objeto está instanciado, podemos
acessar seus atributos e executar seus métodos.
irb(main):007:0> doc.words
=> ["This", "is", "a", "content", "of", "document."]
irb(main):008:0> doc.word_count
=> 6
irb(main):009:0> doc.title
=> "Ruby Tutorial"
irb(main):010:0> doc.author
=> "Joao Lucas"
A linguagem Ruby
@jlucasps
Agora vamos adicionar um atributo created_at e
definicar seu valor no momento de criação do
objeto.
Além disso, vamos criar um método que retorne
o documento completo, contento título,
conteúdo, autor e data de criação.
A linguagem Ruby
@jlucasps
class Document
attr_accessor :title, :author, :content
attr_reader :created_at
def initialize(title, author, content)
@created_at = Time.now
@title = title
@author = author
@content = content
end
def words
@content.split
end
def word_count
words.size
end
def full_doc
@title + ", by " + @author + ". " + @content + ". At: " + @created_at.to_s
end
end
A linguagem Ruby
@jlucasps
Basta executarmos o interpretador novamente e
importar o arquivo modificado
$ irb-ruby-1.9.3-p392
irb(main):001:0> require './document'
=> true
irb(main):002:0> doc = Document.new "Ruby Tutorial", "João Lucas", "This is a content of
document"
=> #<Document:0x00000000c077b8 @created_at=2013-05-29 04:40:57 -0300, @title="Ruby
Tutorial", @author="João Lucas", @content="This is a content of document">
irb(main):003:0> doc.full_doc
=> "Ruby Tutorial, by João Lucas. This is a content of document. At: 2013-05-29 04:40:57
-0300"
irb(main):004:0>
Ruby on Rails full stack
@jlucasps
Model View
Controller
Web Server
App Server
Rails
request
response
Ruby on Rails full stack
@jlucasps
O que é um request?
é um conjunto de instruções que diz ao
servidor qual tipo de resposta é esperada
Ruby on Rails full stack
@jlucasps
http://myapp.com/users/2/lists
request path: http://myapp.com/users/2/lists
request url:
request verb: GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
query data: http://myapp.com/users?page=5
header data:
Ruby on Rails full stack
@jlucasps
header data:
Ruby on Rails full stack
@jlucasps
Browser para o Web Server
Model View
Controller
Web Server
App Server
Rails
Ruby on Rails full stack
@jlucasps
http://myapp.com/users/2/lists
Ruby on Rails full stack
@jlucasps
Model View
Controller
Web Server
App Server
Rails
REQUEST:
GET http://myapp.com/users/2/lists
Ruby on Rails full stack
@jlucasps
um software que entrega páginas web
para um request usando o protocolo HTTP
O que é um Web Server?
hospeda aplicações e gerencia a entrega
de conteúdo dessas aplicações
WEBRick
Ruby on Rails full stack
@jlucasps
Model View
Controller
Web Server
App Server
Rails
REQUEST:
GET http://myapp.com/users/2/lists
Web Server para o App Server
ACCEPTED: passado para o App Server
Ruby on Rails full stack
@jlucasps
O que é um App Server?
software que gerencia a execução de
programas, rotinas, scripts para uma
aplicação
responsável por inicializar o Rails
Apache Phusion
Passenger
Apache Tomcat
thin mongrel
Ruby on Rails full stack
@jlucasps
Rails
Model View
Controller
Web Server
App Server
Rails
REQUEST:
GET http://myapp.com/users/2/lists
ACCEPTED: passado para o App Server
Request passado para o Rails
Ruby on Rails full stack
@jlucasps
Model View
Controller
Rails
Router
Rails
Ruby on Rails full stack
@jlucasps
Router
Ruby on Rails full stack
@jlucasps
Router
Ruby on Rails full stack
@jlucasps
Router
Ruby on Rails full stack
@jlucasps
Router
user_lists GET /users/:user_id/lists(.:format) lists#index
Controller e Action selecionadas:
GET /users/2/lists
CONTROLLER: "lists"
ACTION: "index"
NOME DA ROTA: "user_lists"
Ruby on Rails full stack
@jlucasps
Router
Ruby on Rails full stack
@jlucasps
Model View
Controller
Rails
Router
Controller
Controller
Model View
Action Action Action
Action Action Action
GET /users/2/lists
CONTROLLER: "lists"
ACTION: "index"
Ruby on Rails full stack
@jlucasps
Model View
Controller
Rails
Router
Controller
ListsController
Model View
index new create
update destroy ........
GET /users/2/lists
CONTROLLER: "lists"
ACTION: "index"
Ruby on Rails full stack
@jlucasps
Controller Action
Ruby on Rails full stack
@jlucasps
Model
Convetions over
Configurations
Ruby on Rails full stack
@jlucasps
Model
@user = User.find(params[:user_id])
@lists = List.find_all_by_user_id(params[:user_id])
ListsController
index new create
update destroy ........
User
Model
List
Model
Active
Record
Active
Record
Banco de dados
tabela 'users'
tabela 'lists'
Ruby on Rails full stack
@jlucasps
REQUEST:
GET http://myapp.com/users/2/lists
ACCEPTED: passado para o App Server
REQUEST passado para o Rails
PATH e METHOD mapeados para
CONTROLLER e ACTION
CONTROLLER recupera informações
dos MODELS para suprir a VIEW
Model View
Controller
Web Server
App Server
Rails
Router
action action action
Ruby on Rails full stack
@jlucasps
View
ListsController
index
update
View
app/views/lists/index.html.erb
edit
..........
app/views/lists/update.html.erb
@vars
.html
@vars
.html
Request Headers
Accept: text/html, application/xhtml+xml
Ruby on Rails full stack
@jlucasps
HTTP Response
Ruby on Rails full stack
@jlucasps
HTTP Response
● 1xx Informational - Request received, continuing process.
● 2xx Success - The action requested by the client was received,
understood, accepted and processed successfully.
● 3xx Redirection - The client must take additional action to
complete the request.
● 4xx Client Error - The 4xx class of status code is intended for
cases in which the client seems to have erred.
● 5xx Server Error - The server failed to fulfill an apparently valid
request.
Ruby on Rails full stack
@jlucasps
HTTP Response
Ruby on Rails full stack
@jlucasps
REQUEST:
GET http://myapp.com/users/2/lists
ACCEPTED: passado para o App Server
REQUEST passado para o Rails
PATH e METHOD mapeados para
CONTROLLER e ACTION
CONTROLLER recupera informações
dos MODELS para suprir a VIEW
Model View
Controller
Web Server
App Server
Rails
Router
action action action
VIEW cria a resposta para o RESPONSE
BODY
Ruby on Rails full stack
@jlucasps
Model View
Controller
Web Server
App Server
Rails
Router
action action action
VIEW cria a resposta para o RESPONSE
BODY
RESPONSE volta através do middleware
stack
RESPONSE é retornada para o browser
RESPONSE recebida :-)
Ruby on Rails full stack
@jlucasps
Response
@jlucasps
Aplicação Básica
● Ferramentas para desenvolvimento
○ IDE's (Integrated Development Environment)
@jlucasps
Aplicação Básica
● Ferramentas para desenvolvimento
○ IDE's (Integrated Development Environment)
@jlucasps
Aplicação Básica
● Ferramentas para desenvolvimento
○ IDE's (Integrated Development Environment)
@jlucasps
Aplicação Básica
● Ferramentas para desenvolvimento
○ IDE's (Integrated Development Environment)
Aplicação Básica
@jlucasps
● Editores de texto
○ Sublime Text 2
Aplicação Básica
@jlucasps
● Editores de texto
Aplicação Básica
@jlucasps
● Terminal / console
○ iTerm, Konsole, Gnome-Terminal
Aplicação Básica
@jlucasps
● Terminal / console
Aplicação Básica
@jlucasps
● Browsers
Antigos
Aplicação Básica
@jlucasps
● Gerenciamento de código
Aplicação Básica
@jlucasps
● Gerenciamento de versões e código
CVS (Concurrent Version System)
Aplicação Básica
@jlucasps
Rubygems Rails
● Core
Ruby
Aplicação Básica
@jlucasps
jlucasps@lotus:/media/truecrypt1/handsonrails$ rails new first_app
create
create README.rdoc
create Rakefile
create config.ru
create .gitignore
create Gemfile
....
Using sqlite3 (1.3.7)
Installing uglifier (2.1.1)
Your bundle is complete!
Use `bundle show [gemname]` to see where a bundled gem is
installed.
jlucasps@lotus:/media/truecrypt1/handsonrails$
Aplicação Básica
@jlucasps
jlucasps@lotus:/media/truecrypt1/handsonrails$ cd first_app
jlucasps@lotus:/media/truecrypt1/handsonrails/first_app$ rails server
jlucasps@lotus:/media/truecrypt1/handsonrails/first_app$ rails server
/home/jlucasps/.rvm/gems/ruby-1.9.3-p392/gems/execjs-1.4.0
/lib/execjs/runtimes.rb:51:in `autodetect': Could not find a JavaScript
runtime. See https://github.com/sstephenson/execjs for a list of
available runtimes. (ExecJS::RuntimeUnavailable)
Caso ocorra erro Javascript Runtime
# See https://github.com/sstephenson/execjs#readme ....
gem 'therubyracer', :platforms => :ruby
Adicionar a gem therubyracer ao Gemfile
Aplicação Básica
@jlucasps
app/ Código da aplicação, incluindo models, views, controllers e helpers.
app/assets Assets da aplicação, tais como CSS's, JavaScripts, imagens e fontes.
config/ Configurações da aplicação
db/ Configurações dos bancos de dados
doc/ Documentação da aplicação
lib/ Bibliotecas utilizadas pela aplicação
lib/assets Assets utilizados pelas bibliotecas da aplicação
log/ Logs da aplicação
public/ Conteúdos de acesso público (páginas de errors)
script/rails Script para executar generators, iniciar servidor local, iniciar rails console
test/ Suite de testes da aplicação (substituído pelo spec/ quando utilizado RSpec)
tmp/ Arquivos temporários
vendor/ Códigos de terceiros que devem estar junto com a aplicação
vendor/assets Assets fornecidos por terceiros (plugins jQuery, Javascript, CSS's, imagens)
README.rdoc Breve descrição da aplicação
Rakefile Configuração para execução de rake tasks da aplicação
Gemfile Gems necessárias para a aplicação
Gemfile.lock Lista detalhada de todas as dependências da aplicação
config.ru Configuração para servidores que utilizam Rack
.gitignore Arquivos e diretórios a serem ignorados pelo Git
Versionamento com Git
@jlucasps
Sistema de controle de versão distribuído
Projetado por Linus Torvalds
PUSH PU
LL
PU
SHPUSH
Versionamento com Git
@jlucasps
diretório
$ git add .
$ git commit modificação $ git add .
$ git commit modificação modificação
$ git init
.git/
Versionamento com Git
Setup inicial do Git:
$ git config --global user.name "Your Name"
$ git config --global user.email your.email@example.com
Criar repositório em no diretório atual:
$ git init
Editar arquivos que devem ser ignorados:
$ sublime .gitignore
Adicionar todos os arquivos ao índice:
$ git add .
Verificar status do repositório:
$ git status
Fazer commit das modificações:
$ git commit -m "message"
Verificar histório de commits:
$ git log
@jlucasps
Versionamento com Git
Criar conta no github
Adicionar chave SSH
$ ssh-keygen -t rsa -C "your_email@example.com"
Enter passphrase (empty for no passphrase): [Type a passphrase]
Enter same passphrase again: [Type passphrase again]
Adicionar repositorio remote e push
$ git remote add origin git@github.com:<username>/first_app.git
$ git push -u origin master
Editar README e commit
@jlucasps
Configuração de Assets
Download do Twitter Bootstrap
Mover imagens
bootstrap/img/* -> app/assets/images/
Mover arquivos JavaScript
bootstrap/js/bootstrap.js -> app/assets/javascripts/
Mover arquivos de stylesheets
bootstrap/css/bootstrap.css -> app/assets/stylesheets/
bootstrap/css/bootstrap-responsive.css ->
app/assets/stylesheets/
@jlucasps
Configuração de Assets
Remover app/public/index.html
Criar app/controllers/welcome_controller.rb
Criar action index
Adicionar rota :root
Criar view app/view/welcome/index.html.erb
bootstrap.css -> bootstrap.css.erb
Utilizar asset_path nas URLs para assets
@jlucasps
Deploy na Heroku
@jlucasps
first_app$ heroku create
Criar conta na Heroku, incluir chave SSH
Adicionar app Rails à sua conta:
Adicionar gem 'pg' ao Gemfile
Adicionar addon heroku-postgresql
first_app$ heroku addons:add heroku-postgresql
Instalar Heroku Toolbet
Deploy na Heroku
@jlucasps
first_app$ git push hereoku master
Deploy da aplicação:
Commitar modificações
Desenvolvimento
Web com Ruby on
Rails
João Lucas Pereira de Santana
gtalk | linkedin | twitter: jlucasps
Obrigado!

Mais conteúdo relacionado

Mais procurados

Introdução ao Ruby on Rails
Introdução ao Ruby on RailsIntrodução ao Ruby on Rails
Introdução ao Ruby on RailsJuan Maiz
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Introducao ao desenvolvimento web com Rails
Introducao ao desenvolvimento web com RailsIntroducao ao desenvolvimento web com Rails
Introducao ao desenvolvimento web com RailsKaton Agência Digital
 
APIs do Jeito Certo
APIs do Jeito CertoAPIs do Jeito Certo
APIs do Jeito CertoRavan Scafi
 
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Filosofia Ruby e Rails (UFOP e Inforuso 2010)Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Filosofia Ruby e Rails (UFOP e Inforuso 2010)Daniel Lopes
 
Laravel 5: Entenda o ambiente e a estrutura MVC
 Laravel 5: Entenda o ambiente e a estrutura MVC Laravel 5: Entenda o ambiente e a estrutura MVC
Laravel 5: Entenda o ambiente e a estrutura MVCMichael Douglas
 
Evitando a fadiga com Laravel Homestead
Evitando a fadiga com Laravel HomesteadEvitando a fadiga com Laravel Homestead
Evitando a fadiga com Laravel HomesteadDanilo Esser
 
Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)Daniel Lopes
 
A mágica por trás dos aplicativos ( Api com o Laravel )
A mágica por trás dos aplicativos ( Api com o Laravel )A mágica por trás dos aplicativos ( Api com o Laravel )
A mágica por trás dos aplicativos ( Api com o Laravel )Michael Douglas
 
Ruby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariaisRuby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariaisRodrigo Recio
 
Introdução à Servlets e JSP
Introdução à Servlets e JSPIntrodução à Servlets e JSP
Introdução à Servlets e JSPledsifes
 
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1Thyago Maia
 
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2Thyago Maia
 
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1Thyago Maia
 

Mais procurados (20)

Introdução ao Ruby on Rails
Introdução ao Ruby on RailsIntrodução ao Ruby on Rails
Introdução ao Ruby on Rails
 
Laravel 5
Laravel 5Laravel 5
Laravel 5
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Introducao ao desenvolvimento web com Rails
Introducao ao desenvolvimento web com RailsIntroducao ao desenvolvimento web com Rails
Introducao ao desenvolvimento web com Rails
 
APIs do Jeito Certo
APIs do Jeito CertoAPIs do Jeito Certo
APIs do Jeito Certo
 
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Filosofia Ruby e Rails (UFOP e Inforuso 2010)Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
 
Laravel 5: Entenda o ambiente e a estrutura MVC
 Laravel 5: Entenda o ambiente e a estrutura MVC Laravel 5: Entenda o ambiente e a estrutura MVC
Laravel 5: Entenda o ambiente e a estrutura MVC
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Rails
 
Evitando a fadiga com Laravel Homestead
Evitando a fadiga com Laravel HomesteadEvitando a fadiga com Laravel Homestead
Evitando a fadiga com Laravel Homestead
 
Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)
 
Servlets e JSP
Servlets e JSPServlets e JSP
Servlets e JSP
 
A mágica por trás dos aplicativos ( Api com o Laravel )
A mágica por trás dos aplicativos ( Api com o Laravel )A mágica por trás dos aplicativos ( Api com o Laravel )
A mágica por trás dos aplicativos ( Api com o Laravel )
 
Ruby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariaisRuby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariais
 
Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3
 
Introdução à Servlets e JSP
Introdução à Servlets e JSPIntrodução à Servlets e JSP
Introdução à Servlets e JSP
 
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
 
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
 
Ruby On Rails Regis
Ruby On Rails RegisRuby On Rails Regis
Ruby On Rails Regis
 
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
 
Servlets e jsp
Servlets e jspServlets e jsp
Servlets e jsp
 

Destaque

Introdução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação RubyIntrodução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação RubyDiego Rubin
 
Ruby and Rails short motivation
Ruby and Rails short motivationRuby and Rails short motivation
Ruby and Rails short motivationjistr
 
Django: Uso de frameworks ágeis para desenvolvimento web
Django: Uso de frameworks ágeis para desenvolvimento webDjango: Uso de frameworks ágeis para desenvolvimento web
Django: Uso de frameworks ágeis para desenvolvimento webMiguel Galves
 
Introdução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on RailsIntrodução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on RailsJulio Betta
 
Palestra Ruby on Rails SETA 2008/01
Palestra Ruby on Rails SETA 2008/01Palestra Ruby on Rails SETA 2008/01
Palestra Ruby on Rails SETA 2008/01Douglas Roeder
 
Introdução ao Ruby On Rails
Introdução ao Ruby On RailsIntrodução ao Ruby On Rails
Introdução ao Ruby On RailsMilton Moura
 
[PDF] Repensando o Desenvolvimento Web com Ruby on Rails
[PDF] Repensando o Desenvolvimento Web com Ruby on Rails[PDF] Repensando o Desenvolvimento Web com Ruby on Rails
[PDF] Repensando o Desenvolvimento Web com Ruby on RailsDante Regis
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Railsismaelstahelin
 
Caelum ruby-on-rails-rr71
Caelum ruby-on-rails-rr71Caelum ruby-on-rails-rr71
Caelum ruby-on-rails-rr71Lindomar ...
 
Segurança em Rails
Segurança em RailsSegurança em Rails
Segurança em RailsJuan Maiz
 
Mini-curso RoR - Apresentação
Mini-curso RoR - ApresentaçãoMini-curso RoR - Apresentação
Mini-curso RoR - ApresentaçãoAgence Educacional
 
Desenvolvimento Ágil com Rails GURUSC 2011
Desenvolvimento Ágil com Rails GURUSC 2011Desenvolvimento Ágil com Rails GURUSC 2011
Desenvolvimento Ágil com Rails GURUSC 2011Andre Bernardes
 
Apresentação ruby + rails 2014
Apresentação ruby + rails 2014Apresentação ruby + rails 2014
Apresentação ruby + rails 2014Marcelo Bohn
 
Desenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsDesenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsLucas Caton
 
Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!Felipe Queiroz
 

Destaque (20)

Introdução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação RubyIntrodução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação Ruby
 
Programação RAD com Python
Programação RAD com PythonProgramação RAD com Python
Programação RAD com Python
 
Ruby and Rails short motivation
Ruby and Rails short motivationRuby and Rails short motivation
Ruby and Rails short motivation
 
Origem da internet
Origem da internetOrigem da internet
Origem da internet
 
Django: Uso de frameworks ágeis para desenvolvimento web
Django: Uso de frameworks ágeis para desenvolvimento webDjango: Uso de frameworks ágeis para desenvolvimento web
Django: Uso de frameworks ágeis para desenvolvimento web
 
Introdução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on RailsIntrodução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on Rails
 
Mini-curso RoR - Aula 01
Mini-curso RoR - Aula 01Mini-curso RoR - Aula 01
Mini-curso RoR - Aula 01
 
Palestra Ruby on Rails SETA 2008/01
Palestra Ruby on Rails SETA 2008/01Palestra Ruby on Rails SETA 2008/01
Palestra Ruby on Rails SETA 2008/01
 
Introdução ao Ruby On Rails
Introdução ao Ruby On RailsIntrodução ao Ruby On Rails
Introdução ao Ruby On Rails
 
[PDF] Repensando o Desenvolvimento Web com Ruby on Rails
[PDF] Repensando o Desenvolvimento Web com Ruby on Rails[PDF] Repensando o Desenvolvimento Web com Ruby on Rails
[PDF] Repensando o Desenvolvimento Web com Ruby on Rails
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Rails
 
Caelum ruby-on-rails-rr71
Caelum ruby-on-rails-rr71Caelum ruby-on-rails-rr71
Caelum ruby-on-rails-rr71
 
Segurança em Rails
Segurança em RailsSegurança em Rails
Segurança em Rails
 
Mini-curso RoR - Apresentação
Mini-curso RoR - ApresentaçãoMini-curso RoR - Apresentação
Mini-curso RoR - Apresentação
 
Desenvolvimento Ágil com Rails GURUSC 2011
Desenvolvimento Ágil com Rails GURUSC 2011Desenvolvimento Ágil com Rails GURUSC 2011
Desenvolvimento Ágil com Rails GURUSC 2011
 
Apresentação ruby + rails 2014
Apresentação ruby + rails 2014Apresentação ruby + rails 2014
Apresentação ruby + rails 2014
 
Paradigmas do Ruby
Paradigmas do RubyParadigmas do Ruby
Paradigmas do Ruby
 
Conhecendo o Django
Conhecendo o DjangoConhecendo o Django
Conhecendo o Django
 
Desenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsDesenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on Rails
 
Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!
 

Semelhante a Desenvolvimento Web com Ruby on Rails

Rails - EXATEC2009
Rails - EXATEC2009Rails - EXATEC2009
Rails - EXATEC2009Caue Guerra
 
ruby on rails e o mercado
ruby on rails e o mercadoruby on rails e o mercado
ruby on rails e o mercadoelliando dias
 
Testes Automatizados em Ruby on Rails
Testes Automatizados em Ruby on RailsTestes Automatizados em Ruby on Rails
Testes Automatizados em Ruby on RailsThiago Cifani
 
Mini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOLMini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOLtarginosilveira
 
Ruby on rails impressione a você mesmo, seu chefe e seu cliente
Ruby on rails  impressione a você mesmo, seu chefe e seu clienteRuby on rails  impressione a você mesmo, seu chefe e seu cliente
Ruby on rails impressione a você mesmo, seu chefe e seu clienteRodrigo Urubatan
 
Quick introduction to Ruby on Rails
Quick introduction to Ruby on RailsQuick introduction to Ruby on Rails
Quick introduction to Ruby on RailsWhitesmith
 
Ruby and Rails intro
Ruby and Rails introRuby and Rails intro
Ruby and Rails introNuno Silva
 
Ruby on Rails e o Mercado
Ruby on Rails e o MercadoRuby on Rails e o Mercado
Ruby on Rails e o MercadoJulio Monteiro
 
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando PimentaIniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando Pimentamichel adriano medeiros
 
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Emerson Macedo
 
Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-ptPedro Sousa
 
NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.Filipe Morelli
 
Ruby on Rails Colocando a web nos trilhos
Ruby on Rails Colocando a web nos trilhosRuby on Rails Colocando a web nos trilhos
Ruby on Rails Colocando a web nos trilhosjpaulolins
 

Semelhante a Desenvolvimento Web com Ruby on Rails (20)

Rails - EXATEC2009
Rails - EXATEC2009Rails - EXATEC2009
Rails - EXATEC2009
 
ruby on rails e o mercado
ruby on rails e o mercadoruby on rails e o mercado
ruby on rails e o mercado
 
Ruby e Rails
Ruby e RailsRuby e Rails
Ruby e Rails
 
Ruby on Rails
Ruby on RailsRuby on Rails
Ruby on Rails
 
Testes Automatizados em Ruby on Rails
Testes Automatizados em Ruby on RailsTestes Automatizados em Ruby on Rails
Testes Automatizados em Ruby on Rails
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
Ruby on Rails for beginners 2.0
Ruby on Rails for beginners 2.0Ruby on Rails for beginners 2.0
Ruby on Rails for beginners 2.0
 
Ruby and Rails
Ruby and RailsRuby and Rails
Ruby and Rails
 
Mini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOLMini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOL
 
Ruby on rails impressione a você mesmo, seu chefe e seu cliente
Ruby on rails  impressione a você mesmo, seu chefe e seu clienteRuby on rails  impressione a você mesmo, seu chefe e seu cliente
Ruby on rails impressione a você mesmo, seu chefe e seu cliente
 
Oficial
OficialOficial
Oficial
 
Quick introduction to Ruby on Rails
Quick introduction to Ruby on RailsQuick introduction to Ruby on Rails
Quick introduction to Ruby on Rails
 
Ruby and Rails intro
Ruby and Rails introRuby and Rails intro
Ruby and Rails intro
 
Ruby on Rails e o Mercado
Ruby on Rails e o MercadoRuby on Rails e o Mercado
Ruby on Rails e o Mercado
 
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando PimentaIniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
 
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010
 
Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-pt
 
NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.
 
Desenvolvimento agil ifc
Desenvolvimento agil ifcDesenvolvimento agil ifc
Desenvolvimento agil ifc
 
Ruby on Rails Colocando a web nos trilhos
Ruby on Rails Colocando a web nos trilhosRuby on Rails Colocando a web nos trilhos
Ruby on Rails Colocando a web nos trilhos
 

Mais de Joao Lucas Santana

Critical Rendering Path - Velocidade também é uma funcionalidade
Critical Rendering Path - Velocidade também é uma funcionalidadeCritical Rendering Path - Velocidade também é uma funcionalidade
Critical Rendering Path - Velocidade também é uma funcionalidadeJoao Lucas Santana
 
Um roadmap do Framework Ruby on Rails, do Rails 1 ao Rails 4 - DevDay 2013
Um roadmap do Framework Ruby on Rails, do Rails 1 ao Rails 4 - DevDay 2013Um roadmap do Framework Ruby on Rails, do Rails 1 ao Rails 4 - DevDay 2013
Um roadmap do Framework Ruby on Rails, do Rails 1 ao Rails 4 - DevDay 2013Joao Lucas Santana
 
Desenvolvimento web com Ruby on Rails (extras)
Desenvolvimento web com Ruby on Rails (extras)Desenvolvimento web com Ruby on Rails (extras)
Desenvolvimento web com Ruby on Rails (extras)Joao Lucas Santana
 
Desenvolvimento web com Ruby on Rails (parte 6)
Desenvolvimento web com Ruby on Rails (parte 6)Desenvolvimento web com Ruby on Rails (parte 6)
Desenvolvimento web com Ruby on Rails (parte 6)Joao Lucas Santana
 
Desenvolvimento web com Ruby on Rails (parte 5)
Desenvolvimento web com Ruby on Rails (parte 5)Desenvolvimento web com Ruby on Rails (parte 5)
Desenvolvimento web com Ruby on Rails (parte 5)Joao Lucas Santana
 
Desenvolvimento web com Ruby on Rails (parte 4)
Desenvolvimento web com Ruby on Rails (parte 4)Desenvolvimento web com Ruby on Rails (parte 4)
Desenvolvimento web com Ruby on Rails (parte 4)Joao Lucas Santana
 
Desenvolvimento web com Ruby on Rails (parte 3)
Desenvolvimento web com Ruby on Rails (parte 3)Desenvolvimento web com Ruby on Rails (parte 3)
Desenvolvimento web com Ruby on Rails (parte 3)Joao Lucas Santana
 
Desenvolvimento web com Ruby on Rails (parte 2)
Desenvolvimento web com Ruby on Rails (parte 2)Desenvolvimento web com Ruby on Rails (parte 2)
Desenvolvimento web com Ruby on Rails (parte 2)Joao Lucas Santana
 

Mais de Joao Lucas Santana (8)

Critical Rendering Path - Velocidade também é uma funcionalidade
Critical Rendering Path - Velocidade também é uma funcionalidadeCritical Rendering Path - Velocidade também é uma funcionalidade
Critical Rendering Path - Velocidade também é uma funcionalidade
 
Um roadmap do Framework Ruby on Rails, do Rails 1 ao Rails 4 - DevDay 2013
Um roadmap do Framework Ruby on Rails, do Rails 1 ao Rails 4 - DevDay 2013Um roadmap do Framework Ruby on Rails, do Rails 1 ao Rails 4 - DevDay 2013
Um roadmap do Framework Ruby on Rails, do Rails 1 ao Rails 4 - DevDay 2013
 
Desenvolvimento web com Ruby on Rails (extras)
Desenvolvimento web com Ruby on Rails (extras)Desenvolvimento web com Ruby on Rails (extras)
Desenvolvimento web com Ruby on Rails (extras)
 
Desenvolvimento web com Ruby on Rails (parte 6)
Desenvolvimento web com Ruby on Rails (parte 6)Desenvolvimento web com Ruby on Rails (parte 6)
Desenvolvimento web com Ruby on Rails (parte 6)
 
Desenvolvimento web com Ruby on Rails (parte 5)
Desenvolvimento web com Ruby on Rails (parte 5)Desenvolvimento web com Ruby on Rails (parte 5)
Desenvolvimento web com Ruby on Rails (parte 5)
 
Desenvolvimento web com Ruby on Rails (parte 4)
Desenvolvimento web com Ruby on Rails (parte 4)Desenvolvimento web com Ruby on Rails (parte 4)
Desenvolvimento web com Ruby on Rails (parte 4)
 
Desenvolvimento web com Ruby on Rails (parte 3)
Desenvolvimento web com Ruby on Rails (parte 3)Desenvolvimento web com Ruby on Rails (parte 3)
Desenvolvimento web com Ruby on Rails (parte 3)
 
Desenvolvimento web com Ruby on Rails (parte 2)
Desenvolvimento web com Ruby on Rails (parte 2)Desenvolvimento web com Ruby on Rails (parte 2)
Desenvolvimento web com Ruby on Rails (parte 2)
 

Desenvolvimento Web com Ruby on Rails

  • 1. Desenvolvimento Web com Ruby on Rails João Lucas Pereira de Santana gtalk | linkedin | twitter: jlucasps
  • 2. Agenda ● Origem do framework ● Por que aprender Ruby on Rails ● A linguagem Ruby ● Ruby on Rails full stack ● Aplicação Básica ● Versionamento com Git ● Configuração de Assets ● Deploy na Heroku @jlucasps
  • 3. Origem @jlucasps Open source desde 2004 David Heinemeier Hansson
  • 4. Origem @jlucasps Rails Core Team Jeremy Kemper Michael Koziarski Yehuda Katz José Valim Santiago Pastorino Aaron Patterson Xavier Noria Jon Leighton Rafael França Andrew White Guillermo Iguaran Carlos Antonio
  • 5. Origem Escrito em Ruby Yukihiro Matsumoto @jlucasps
  • 6. Testes Testes Testes Origem Framework para desenvolvimento de apps Web seguindo o padrão MVC (Model-View- Controller) @jlucasps Model View Controller HTTP/SSL Routes Helpers Middleware Responders Renders Session Logs Associations Validations Queries Callbacks Connections Migrations Assets Helpers Builders Templates Partials
  • 7. Por que aprender Ruby on Rails? O que vocês me dizem? @jlucasps
  • 8. Por que aprender Ruby on Rails? @jlucasps ● Tecnologia ○ Implementado na Linguagem Ruby ○ Linguagem Interpretada ○ Orientada a Objetos ○ Sintaxe bastante inspirada em Perl e Lisp
  • 9. Ruby foi desenvolvida por Yukihiro ‘Matz’ Matsumoto, e lançada em 1995 É uma linguagem Orientada a Objetos de tipagem forte e dinânima Características principais: Por que aprender Ruby on Rails? @jlucasps Simplicidade do código escrito Poder do código gerado
  • 10. Por que aprender Ruby on Rails? Ruby foi construída com base em duas simples idéias: @jlucasps O código deve ser bastante claro O código deve ser conciso Código simples, efetivo e fazer exatamente o que ele se propõe a fazer.
  • 11. Por que aprender Ruby on Rails? Ruby foi pensada para ser uma linguagem divertida de usar (joy to use) @jlucasps
  • 12. Por que aprender Ruby on Rails? ● Além de uma linguagem de muito alto nível; ● Ruby é extremamente poderosa; ● Versátil; ● Mantendo um equilíbrio entre clareza e performance. @jlucasps
  • 13. Por que aprender Ruby on Rails? O primeiro interpretador para Ruby (MRI - Matz’s Ruby Interpreter) foi escrito em C. Atualmente existem versões compatíveis com outras plataformas: @jlucasps
  • 14. Por que aprender Ruby on Rails? ● Estrutura do framework ○ Camada de persistência independente @jlucasps
  • 15. Por que aprender Ruby on Rails? ● Conventions over Configurations (CoC) @jlucasps
  • 16. Por que aprender Ruby on Rails? Segue o padrão MVC @jlucasps Model View Controller Separação de interesses entre as camadas da aplicação Isolamento das regras de negócio, evitando duplicação e facilitando a manutenção do código Amplamente conhecido
  • 17. Por que aprender Ruby on Rails? @jlucasps Model View Controller Model Representa as entidades: Document, User, Account, Picture encapsula as regras de negócio específicas da sua aplicação extensões de ActiveRecord::Base representam entradas do banco de dados acoplados com definições das regras do negócio
  • 18. Por que aprender Ruby on Rails? @jlucasps Model View Controller Controller Responder a requisições HTTP enviadas ao servidor retornar arquivos HTML para o usuário que efetuou a requisição XML, JSON, PDF, JavaScript manipulam MODELS e renderizam VIEWS com objetivo de gerar uma resposta apropriada ao usuário.
  • 19. Por que aprender Ruby on Rails? @jlucasps Model View Controller View Arquivos HTML com código Ruby embutido (Embedded Ruby - .erb files) Fornecem uma apresentação apropriada das entidades da sua aplicação Haml, JavaScript
  • 20. Por que aprender Ruby on Rails? ● Implementação RESTful (Representational State Transfer) ○ Mecanismos para facilitar a implementação das regras de negócios, representando-as como transições de estados das entidades do sistema ○ Login/logout da gem Devise: ■ create session ■ destroy session @jlucasps
  • 21. Por que aprender Ruby on Rails? Gerenciador de dependências Bundler @jlucasps Assegura quais versões são necessárias para sua aplicação, bem como resolução de dependência entre elas
  • 22. Por que aprender Ruby on Rails? Dependências em uma aplicação simples @jlucasps
  • 23. Por que aprender Ruby on Rails? Testes automatizados @jlucasps
  • 24. Por que aprender Ruby on Rails? ● Configurações de DEV, TST, STG, PRD ● Deploy @jlucasps
  • 25. Por que aprender Ruby on Rails? Valor de Negócio @jlucasps + foco no negócio - código Rápida resposta a mudanças no negócio
  • 26. Por que aprender Ruby on Rails? Muitas gems, mas muitas mesmo rubygems.org e ruby-toolbox.com @jlucasps jquery-rails pg mailcatcher devise aws-sdk friendly_id rmagick delayed_job jquery-fileupload-rails tiny-mce will_paginate meta-search i18n-js i18n guard-test lol-dba capybara rspec factory-girl simple-cov better_errors
  • 27. A linguagem Ruby Abra o terminal e execute o interpretador Ruby @jlucasps $ irb-ruby-1.9.3-p392 irb(main):001:0> Entre com algum comando e pressione enter para que seja executado. irb(main):001:0> 4 + 6 => 10
  • 28. A linguagem Ruby Observe que o interpretador reconhece números e expressões matemáticas. @jlucasps irb(main):002:0> 10 / 5 => 2 irb(main):003:0> 8 * 2 => 16 irb(main):004:0> (57 - 4) * (3 * 9) => 1431 irb(main):005:0> 3 ** 2 => 9 irb(main):006:0> 5 / 2 => 2
  • 29. A linguagem Ruby @jlucasps irb(main):007:0> "João Lucas" => "João Lucas" Vamos avaliar alguns valores em forma de texto Digite seu nome no interpretador entre aspas (”). Agora vamos verificar algumas funções existentes em objetos desse tipo. irb(main):020:0> "João Lucas".reverse => "sacuL oãoJ"
  • 30. A linguagem Ruby @jlucasps Teste outros métodos existentes em objetos String irb(main):021:0> "João Lucas".length => 10 irb(main):024:0> " abc " + " 123 " => " abc 123 " irb(main):026:0> "Hey Jude, " + "na "*3 => "Hey Jude, na na na " irb(main):029:0> "João Lucas".upcase => "JOãO LUCAS" irb(main):030:0> "João Lucas".downcase => "joão lucas"
  • 31. A linguagem Ruby @jlucasps irb(main):034:0> "está ficando legal isso aqui".capitalize => "Está ficando legal isso aqui" irb(main):036:0> "está ficando legal isso aqui".split => ["está", "ficando", "legal", "isso", "aqui"] irb(main):037:0> "está ficando legal isso aqui".split('l') => ["está ficando ", "ega", " isso aqui"] irb(main):038:0> "está ficando legal isso aqui".split('a') => ["está fic", "ndo leg", "l isso ", "qui"]
  • 32. A linguagem Ruby @jlucasps E o que acontece se tentarmos executar em números alguns métodos existentes em Strings? irb(main):039:0> 40.reverse Qual a resposta exibida? NoMethodError: undefined method `reverse' for 40:Fixnum from (irb):39 from /home/jlucasps/.rvm/rubies/ruby-1.9.3-p392/bin/irb:13:in `<main>'
  • 33. A linguagem Ruby @jlucasps E para o comando: irb(main):040:0> "40".reverse Você consegue explicar por que a saída é: irb(main):040:0> "40".reverse => "04"
  • 34. A linguagem Ruby @jlucasps Nem todos os objetos Ruby implementam os mesmos métodos. No entanto, existe a possibilidade de converter objetos de um tipo para outro. irb(main):042:0> 40 + 10 => 50 irb(main):044:0> 40.to_s + 10.to_s => "4010"
  • 35. A linguagem Ruby @jlucasps O interpretador também permite trabalharmos com listas (Arrays) irb(main):047:0> [2, 4, 6, 8, 10] => [2, 4, 6, 8, 10] Listas também possuem algumas funções interessantes irb(main):048:0> [2, 4, 6, 8, 10].min => 2 irb(main):049:0> [2, 4, 6, 8, 10].max => 10
  • 36. A linguagem Ruby @jlucasps E se não quisermos ter o trabalho de repetir todos esses números a cada execução? irb(main):053:0> even = [2, 4, 6, 8, 10] => [2, 4, 6, 8, 10] irb(main):054:0> even.min => 2 Basta armazenarmos em uma variável
  • 37. A linguagem Ruby @jlucasps Armazenando os objetos em variáveis, podemos trabalhar mais facilmente irb(main):056:0> even.shuffle => [10, 4, 2, 8, 6] irb(main):058:0> even = even.shuffle => [2, 8, 6, 4, 10] irb(main):059:0> even.sort => [2, 4, 6, 8, 10] irb(main):089:0> even.push(12) => [2, 8, 6, 4, 10, 12] irb(main):090:0> even[6] = 14 => 14 irb(main):103:0> even => [2, 8, 6, 4, 10, 12, 14]
  • 38. A linguagem Ruby @jlucasps Alguém sabe porquê o método pop funciona de modo diferente para uma lista em ordem normal e uma lista em ordem reversa? irb(main):103:0> even => [2, 8, 6, 4, 10, 12, 14] irb(main):104:0> even.pop => 14 irb(main):106:0> even => [2, 8, 6, 4, 10, 12] irb(main):107:0> even.reverse.pop => 2 irb(main):108:0> even => [2, 8, 6, 4, 10, 12]
  • 39. A linguagem Ruby @jlucasps A explicação pode ser encontrada executando o código abaixo irb(main):110:0> even.object_id => 8472880 irb(main):111:0> even.reverse.object_id => 9555820
  • 40. A linguagem Ruby @jlucasps E se quisermos substituir uma pequena parte de um texto maior? irb(main):070:0> text = "Ticking away the moments that make up a dull day. You fritter and waste the hours in an off hand way" => "Ticking away the moments that make up a dull day. You fritter and waste the hours in an off hand way" irb(main):071:0> text["dull"] = "great" => "great" irb(main):072:0> text => "Ticking away the moments that make up a great day. You fritter and waste the hours in an off hand way"
  • 41. A linguagem Ruby @jlucasps Um característica interessante da implementação de Ruby é a fácil leitura do código => "Kicking around on a piece of ground in your home town" irb(main):076:0> text.include?("home") => true irb(main):077:0> text.include?("my home") => false irb(main):084:0> text.include? "black" => true
  • 42. A linguagem Ruby @jlucasps Além de números, Strings e Arrays, quais outras estruturas de dados temos em Ruby? irb(main):086:0> songs = {} => {} O processo de inserção de valores em um Hash é semelhante a inserção em Arrays irb(main):114:0> songs[:good] = "Stairway to Heaven" => "Stairway to Heaven" irb(main):115:0> songs[:horrible] = "Boquinha da garrafa" => "Boquinha da garrafa"
  • 43. A linguagem Ruby @jlucasps Agora vamos conhecer outras estruturas não muito conhecidas irb(main):129:0> all = "" => "" irb(main):134:0> songs.values.each {|value| all += value + ", " } => ["Stairway to Heaven", "Boquinha da garrafa"] irb(main):135:0> all => "Stairway to Heaven, Boquinha da garrafa, "
  • 44. A linguagem Ruby @jlucasps Acabamos de usar uma estrutura chamada Block. Vamos executar um outro teste mais simples, para facilitar a visualização irb(main):136:0> 5.times {puts "ihhhhrrrraaaaa"} ihhhhrrrraaaaa ihhhhrrrraaaaa ihhhhrrrraaaaa ihhhhrrrraaaaa ihhhhrrrraaaaa => 5
  • 45. A linguagem Ruby @jlucasps Nos exemplo anteriores, usamos uma estrutura não muito comum para identificar as chaves do Hash, chamada Symbol. Symbols são criados utilizando-se as sintaxes : name ou :”name” Um mesmo Symbol será criado para um dado nome enquanto durar a execução do programa, independente do contexto.
  • 46. @jlucasps A linguagem Ruby module One class Fred end $f1 = :Fred end module Two Fred = 1 $f2 = :Fred end def Fred() end $f3 = :Fred irb(main):186:0> $f1.object_id => 463148 irb(main):187:0> $f2.object_id => 463148 irb(main):188:0> $f3.object_id => 463148
  • 47. A linguagem Ruby @jlucasps Por enquanto, trabalhamos apenas com objetos existentes na linguagem Ruby. E se precisarmos criar nossos próprios objetos? Para criar objetos, precisamos implementar classes. Classes são estruturas que definem quais infomormaçãoes serão armazenadas nos objetos, a quais métodos devem responder e quais os comportamentos.
  • 48. A linguagem Ruby @jlucasps class Document attr_accessor :title, :author, :content def initialize(title, author, content) @title = title @author = author @content = content end def words @content.split end def word_count words.size end end
  • 49. A linguagem Ruby @jlucasps Execute o interpretador ruby no mesmo diretório onde o arquivo foi salvo $ irb-ruby-1.9.3-p392 Importe o arquivo para que ele seja lido pelo interpretador e fique disponível para utilização irb(main):001:0> require './document' => true
  • 50. A linguagem Ruby @jlucasps Definimos a classe Document com algumas informações e comportamentos. Em linguagens Orientadas a Objetos, as classes servem como “fabricantes”, ou “moldes” de objetos, é a partir delas que os objetos são criados. Além disso, as classes definem quais as informações, ou atributos, os objetos criados a partir daquela classe devem ter.
  • 51. A linguagem Ruby @jlucasps Os atributos são definidos pela instrução ... attr_accessor :title, :author, :content ... O termo attr_accessor é uma abreviação para ‘attribute accessor’, que define que os atributos serão acessíveis nos objetos daquela classe
  • 52. A linguagem Ruby @jlucasps Nossa classe Document também define três métodos, e um deles tem um comportamento especial. Em Ruby, o construtor é sempre o método initialize. Na nossa implementação, precisamos de três informações para criar objetos do tipo Document, são elas: title, author, content.
  • 53. A linguagem Ruby @jlucasps Além do construtor, definimos outros dois métodos (words e word_count) na classe Document. Estes métodos são responsáveis por implementar comportamentos adicionais dos objetos do tipo Document.
  • 54. A linguagem Ruby @jlucasps Para instruirmos a classe Document a criar objetos, executamos uma chamada ao construtor e passamos as informações requeridas. irb(main):002:0> doc = Document.new "Ruby Tutorial", "Joao Lucas", "This is a content of document." => #<Document:0x00000001074968 @title="Ruby Tutorial", @author="Joao Lucas", @content="This is a content of document.">
  • 55. A linguagem Ruby @jlucasps Uma vez que o objeto está instanciado, podemos acessar seus atributos e executar seus métodos. irb(main):007:0> doc.words => ["This", "is", "a", "content", "of", "document."] irb(main):008:0> doc.word_count => 6 irb(main):009:0> doc.title => "Ruby Tutorial" irb(main):010:0> doc.author => "Joao Lucas"
  • 56. A linguagem Ruby @jlucasps Agora vamos adicionar um atributo created_at e definicar seu valor no momento de criação do objeto. Além disso, vamos criar um método que retorne o documento completo, contento título, conteúdo, autor e data de criação.
  • 57. A linguagem Ruby @jlucasps class Document attr_accessor :title, :author, :content attr_reader :created_at def initialize(title, author, content) @created_at = Time.now @title = title @author = author @content = content end def words @content.split end def word_count words.size end def full_doc @title + ", by " + @author + ". " + @content + ". At: " + @created_at.to_s end end
  • 58. A linguagem Ruby @jlucasps Basta executarmos o interpretador novamente e importar o arquivo modificado $ irb-ruby-1.9.3-p392 irb(main):001:0> require './document' => true irb(main):002:0> doc = Document.new "Ruby Tutorial", "João Lucas", "This is a content of document" => #<Document:0x00000000c077b8 @created_at=2013-05-29 04:40:57 -0300, @title="Ruby Tutorial", @author="João Lucas", @content="This is a content of document"> irb(main):003:0> doc.full_doc => "Ruby Tutorial, by João Lucas. This is a content of document. At: 2013-05-29 04:40:57 -0300" irb(main):004:0>
  • 59. Ruby on Rails full stack @jlucasps Model View Controller Web Server App Server Rails request response
  • 60. Ruby on Rails full stack @jlucasps O que é um request? é um conjunto de instruções que diz ao servidor qual tipo de resposta é esperada
  • 61. Ruby on Rails full stack @jlucasps http://myapp.com/users/2/lists request path: http://myapp.com/users/2/lists request url: request verb: GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT query data: http://myapp.com/users?page=5 header data:
  • 62. Ruby on Rails full stack @jlucasps header data:
  • 63. Ruby on Rails full stack @jlucasps Browser para o Web Server Model View Controller Web Server App Server Rails
  • 64. Ruby on Rails full stack @jlucasps http://myapp.com/users/2/lists
  • 65. Ruby on Rails full stack @jlucasps Model View Controller Web Server App Server Rails REQUEST: GET http://myapp.com/users/2/lists
  • 66. Ruby on Rails full stack @jlucasps um software que entrega páginas web para um request usando o protocolo HTTP O que é um Web Server? hospeda aplicações e gerencia a entrega de conteúdo dessas aplicações WEBRick
  • 67. Ruby on Rails full stack @jlucasps Model View Controller Web Server App Server Rails REQUEST: GET http://myapp.com/users/2/lists Web Server para o App Server ACCEPTED: passado para o App Server
  • 68. Ruby on Rails full stack @jlucasps O que é um App Server? software que gerencia a execução de programas, rotinas, scripts para uma aplicação responsável por inicializar o Rails Apache Phusion Passenger Apache Tomcat thin mongrel
  • 69. Ruby on Rails full stack @jlucasps Rails Model View Controller Web Server App Server Rails REQUEST: GET http://myapp.com/users/2/lists ACCEPTED: passado para o App Server Request passado para o Rails
  • 70. Ruby on Rails full stack @jlucasps Model View Controller Rails Router Rails
  • 71. Ruby on Rails full stack @jlucasps Router
  • 72. Ruby on Rails full stack @jlucasps Router
  • 73. Ruby on Rails full stack @jlucasps Router
  • 74. Ruby on Rails full stack @jlucasps Router user_lists GET /users/:user_id/lists(.:format) lists#index Controller e Action selecionadas: GET /users/2/lists CONTROLLER: "lists" ACTION: "index" NOME DA ROTA: "user_lists"
  • 75. Ruby on Rails full stack @jlucasps Router
  • 76. Ruby on Rails full stack @jlucasps Model View Controller Rails Router Controller Controller Model View Action Action Action Action Action Action GET /users/2/lists CONTROLLER: "lists" ACTION: "index"
  • 77. Ruby on Rails full stack @jlucasps Model View Controller Rails Router Controller ListsController Model View index new create update destroy ........ GET /users/2/lists CONTROLLER: "lists" ACTION: "index"
  • 78. Ruby on Rails full stack @jlucasps Controller Action
  • 79. Ruby on Rails full stack @jlucasps Model Convetions over Configurations
  • 80. Ruby on Rails full stack @jlucasps Model @user = User.find(params[:user_id]) @lists = List.find_all_by_user_id(params[:user_id]) ListsController index new create update destroy ........ User Model List Model Active Record Active Record Banco de dados tabela 'users' tabela 'lists'
  • 81. Ruby on Rails full stack @jlucasps REQUEST: GET http://myapp.com/users/2/lists ACCEPTED: passado para o App Server REQUEST passado para o Rails PATH e METHOD mapeados para CONTROLLER e ACTION CONTROLLER recupera informações dos MODELS para suprir a VIEW Model View Controller Web Server App Server Rails Router action action action
  • 82. Ruby on Rails full stack @jlucasps View ListsController index update View app/views/lists/index.html.erb edit .......... app/views/lists/update.html.erb @vars .html @vars .html Request Headers Accept: text/html, application/xhtml+xml
  • 83. Ruby on Rails full stack @jlucasps HTTP Response
  • 84. Ruby on Rails full stack @jlucasps HTTP Response ● 1xx Informational - Request received, continuing process. ● 2xx Success - The action requested by the client was received, understood, accepted and processed successfully. ● 3xx Redirection - The client must take additional action to complete the request. ● 4xx Client Error - The 4xx class of status code is intended for cases in which the client seems to have erred. ● 5xx Server Error - The server failed to fulfill an apparently valid request.
  • 85. Ruby on Rails full stack @jlucasps HTTP Response
  • 86. Ruby on Rails full stack @jlucasps REQUEST: GET http://myapp.com/users/2/lists ACCEPTED: passado para o App Server REQUEST passado para o Rails PATH e METHOD mapeados para CONTROLLER e ACTION CONTROLLER recupera informações dos MODELS para suprir a VIEW Model View Controller Web Server App Server Rails Router action action action VIEW cria a resposta para o RESPONSE BODY
  • 87. Ruby on Rails full stack @jlucasps Model View Controller Web Server App Server Rails Router action action action VIEW cria a resposta para o RESPONSE BODY RESPONSE volta através do middleware stack RESPONSE é retornada para o browser RESPONSE recebida :-)
  • 88. Ruby on Rails full stack @jlucasps Response
  • 89. @jlucasps Aplicação Básica ● Ferramentas para desenvolvimento ○ IDE's (Integrated Development Environment)
  • 90. @jlucasps Aplicação Básica ● Ferramentas para desenvolvimento ○ IDE's (Integrated Development Environment)
  • 91. @jlucasps Aplicação Básica ● Ferramentas para desenvolvimento ○ IDE's (Integrated Development Environment)
  • 92. @jlucasps Aplicação Básica ● Ferramentas para desenvolvimento ○ IDE's (Integrated Development Environment)
  • 93. Aplicação Básica @jlucasps ● Editores de texto ○ Sublime Text 2
  • 95. Aplicação Básica @jlucasps ● Terminal / console ○ iTerm, Konsole, Gnome-Terminal
  • 99. Aplicação Básica @jlucasps ● Gerenciamento de versões e código CVS (Concurrent Version System)
  • 101. Aplicação Básica @jlucasps jlucasps@lotus:/media/truecrypt1/handsonrails$ rails new first_app create create README.rdoc create Rakefile create config.ru create .gitignore create Gemfile .... Using sqlite3 (1.3.7) Installing uglifier (2.1.1) Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed. jlucasps@lotus:/media/truecrypt1/handsonrails$
  • 102. Aplicação Básica @jlucasps jlucasps@lotus:/media/truecrypt1/handsonrails$ cd first_app jlucasps@lotus:/media/truecrypt1/handsonrails/first_app$ rails server jlucasps@lotus:/media/truecrypt1/handsonrails/first_app$ rails server /home/jlucasps/.rvm/gems/ruby-1.9.3-p392/gems/execjs-1.4.0 /lib/execjs/runtimes.rb:51:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable) Caso ocorra erro Javascript Runtime # See https://github.com/sstephenson/execjs#readme .... gem 'therubyracer', :platforms => :ruby Adicionar a gem therubyracer ao Gemfile
  • 103. Aplicação Básica @jlucasps app/ Código da aplicação, incluindo models, views, controllers e helpers. app/assets Assets da aplicação, tais como CSS's, JavaScripts, imagens e fontes. config/ Configurações da aplicação db/ Configurações dos bancos de dados doc/ Documentação da aplicação lib/ Bibliotecas utilizadas pela aplicação lib/assets Assets utilizados pelas bibliotecas da aplicação log/ Logs da aplicação public/ Conteúdos de acesso público (páginas de errors) script/rails Script para executar generators, iniciar servidor local, iniciar rails console test/ Suite de testes da aplicação (substituído pelo spec/ quando utilizado RSpec) tmp/ Arquivos temporários vendor/ Códigos de terceiros que devem estar junto com a aplicação vendor/assets Assets fornecidos por terceiros (plugins jQuery, Javascript, CSS's, imagens) README.rdoc Breve descrição da aplicação Rakefile Configuração para execução de rake tasks da aplicação Gemfile Gems necessárias para a aplicação Gemfile.lock Lista detalhada de todas as dependências da aplicação config.ru Configuração para servidores que utilizam Rack .gitignore Arquivos e diretórios a serem ignorados pelo Git
  • 104. Versionamento com Git @jlucasps Sistema de controle de versão distribuído Projetado por Linus Torvalds PUSH PU LL PU SHPUSH
  • 105. Versionamento com Git @jlucasps diretório $ git add . $ git commit modificação $ git add . $ git commit modificação modificação $ git init .git/
  • 106. Versionamento com Git Setup inicial do Git: $ git config --global user.name "Your Name" $ git config --global user.email your.email@example.com Criar repositório em no diretório atual: $ git init Editar arquivos que devem ser ignorados: $ sublime .gitignore Adicionar todos os arquivos ao índice: $ git add . Verificar status do repositório: $ git status Fazer commit das modificações: $ git commit -m "message" Verificar histório de commits: $ git log @jlucasps
  • 107. Versionamento com Git Criar conta no github Adicionar chave SSH $ ssh-keygen -t rsa -C "your_email@example.com" Enter passphrase (empty for no passphrase): [Type a passphrase] Enter same passphrase again: [Type passphrase again] Adicionar repositorio remote e push $ git remote add origin git@github.com:<username>/first_app.git $ git push -u origin master Editar README e commit @jlucasps
  • 108. Configuração de Assets Download do Twitter Bootstrap Mover imagens bootstrap/img/* -> app/assets/images/ Mover arquivos JavaScript bootstrap/js/bootstrap.js -> app/assets/javascripts/ Mover arquivos de stylesheets bootstrap/css/bootstrap.css -> app/assets/stylesheets/ bootstrap/css/bootstrap-responsive.css -> app/assets/stylesheets/ @jlucasps
  • 109. Configuração de Assets Remover app/public/index.html Criar app/controllers/welcome_controller.rb Criar action index Adicionar rota :root Criar view app/view/welcome/index.html.erb bootstrap.css -> bootstrap.css.erb Utilizar asset_path nas URLs para assets @jlucasps
  • 110. Deploy na Heroku @jlucasps first_app$ heroku create Criar conta na Heroku, incluir chave SSH Adicionar app Rails à sua conta: Adicionar gem 'pg' ao Gemfile Adicionar addon heroku-postgresql first_app$ heroku addons:add heroku-postgresql Instalar Heroku Toolbet
  • 111. Deploy na Heroku @jlucasps first_app$ git push hereoku master Deploy da aplicação: Commitar modificações
  • 112. Desenvolvimento Web com Ruby on Rails João Lucas Pereira de Santana gtalk | linkedin | twitter: jlucasps Obrigado!