Vijay Bhaskar at cinemaNeed : 'Ruby on Rail Developer' at NJ Position : Ruby on Rail Developer
Location : NJ
Duration : 6+ Months
Client is looking for “Ruby on Rail Developer” Experience with Ruby on Rail Developer, Heroku or Engine Factory, ect;
Client is Looking more of an architect on such development methodology but he/she has to know how to code too. Any experience on Heroku or Engine Factory would be a plus. Kindly send your resume along with the following information……………………….Please,
FULL NAME:
Best contact number:
Current Location:
Visa Status (US Citizen/GC):
Availability (specify the notice period, if so required):
Expected Hourly / PERANNUM Rate (on W2 Please specify):
Ready to relocate to NJ, if hired for this position (Yes/No):
Ready to Face to Face Interview (Yes/No):
Vijay Bhaskar
Globalnest LLC
281 state Route 79, Suite 208
Morganville, NJ 07751
Voice: (732)-333-4808
Fax: (732) 333-5946
Email: bhaskar@globalnest.com2 years ago
Are you sure you want to
Vijay Bhaskar at cinemaNeed : 'Ruby on Rail Developer' at NJ Position : Ruby on Rail Developer
Location : NJ
Duration : 6+ Months
Client is looking for “Ruby on Rail Developer” Experience with Ruby on Rail Developer, Heroku or Engine Factory, ect;
Client is Looking more of an architect on such development methodology but he/she has to know how to code too. Any experience on Heroku or Engine Factory would be a plus. Kindly send your resume along with the following information……………………….Please,
FULL NAME:
Best contact number:
Current Location:
Visa Status (US Citizen/GC):
Availability (specify the notice period, if so required):
Expected Hourly / PERANNUM Rate (on W2 Please specify):
Ready to relocate to NJ, if hired for this position (Yes/No):
Ready to Face to Face Interview (Yes/No):2 years ago
Are you sure you want to
regispiresExcelente apresentação. Como posso fazer baixá-la?3 years ago
Are you sure you want to
Se for pra resumir o objetivo da palestra em uma frase, seria: - Quebra de paradigmas. Ideal para curiosos, entusiastas e céticosdomundojava.
Ruby é orientada a objetos.
Uma aplicação OO pode ser vista como um grafo de objetos. Cada aresta do grafo representa a dependência de um objeto com outro, sobre a qual mensagens podem ser trocadas.
Os principais conceitos da OOP (e não os pilares) são Classe e Objeto. Classes representam categorias de Objetos. Objetos representam abstrações do mundo real. Objetos comunicam entre si através da troca de mensagens.
Classes definem atributos e métodos para seus objetos. Atributos são características que distinguem objetos entre si. Métodos representam o comportamento esperado de um objeto.
Qualquer entidade utilizada na linguagem Ruby pertence a alguma classe.
1 é instância da classe Fixnum.
O próprio resultado de “1.methods” é um objeto da classe Array que, por sua vez, também possui seus próprios métodos...
...como, por exemplo, o método ‘sort’, que ordena o Array.
Destaque para o método ‘superclass’ da classe Fixnum. Métodos de classe devem ser invocados pela classe e não por seus objetos: Integer.superclass OK 1.class.superclass OK 1.superclass FAIL
De onde apareceram esses ‘comandos’ class e methods que temos usado?
Toda classe do Ruby extende da classe Object
Logo, os métodos disponíveis na classe Object estão também disponíveis em qualquer classe Ruby.
Para rápido acesso às principais classes do Ruby, e seus respectivos métodos, consulte o site ruby-doc.org
Nomes de métodos começam com letra minúscula Nomes compostos são separados por _ (e.g. soma_inteiro e não somaInteiro) Parênteses são opcionais. Logo, ‘def soma a, b’ e ‘def soma (a, b)’ são equivalentes ; também são opcionais ao final de linha O retorno do médoto é igual a sua última operação
O padrão do Ruby é que classes tenham nomes iniciados por letras maiúsculas e estejam em um arquivo com o mesmo nome, iniciado por letra minúscula.
Toda classe pode ser instanciada pelo método new O método new invoca o método construtor da classe, se definido. @valor define uma variável de instância, conforme veremos a seguir. Variáveis não precisam ser previamente declaradas e/ou inicializadas.
Apesar de a variável de instância @valor existir, ela não é acessível externamente.
attr_accessor cria métodos de acesso (‘gets’ e ‘sets’) para a variável de instância
O método super invoca o construtor da classe pai.
Pelo padrão do Ruby, nomes de variáveis devem iniciar com letra minúscula Variáveis em Ruby não são tipadas Variáveis não precisam ser inicializadas Por não serem tipadas, variáveis Ruby podem alterar suas referências para outros tipos de objeto em tempo de execução.
Local - só é visível no escopo em que foi definida (e.g. método, loop, if...) Instância - é visível no escopo do objeto em que foi definida (e.g. “alexandre”.length) Classe - é visível no escopo da classe em que foi definida (e.g. String.ancestors) Global - visível em todos os escopos
Existem 3 classes que representam números no Ruby: Fixnum, Float e Bignum
Qualquer coisa diferente de nil e false é verdadeira.
Strings podem ser declaradas com “ ou ‘ Com “, caracteres especiais são resolvidos
A expansão de variáveis evita a necessidade de concatenação de strings
String com várias linhas %Q{ } e %q{ } também podem ser usados para definição de strings multilinhas, respectivamente, com e sem expansão de variáveis
Constantes devem ter todas as letras maiúsculas. O Ruby não proibe que se altere o valor de constantes, mas alerta pois, se é constante, é constante.
Arrays são automaticamente criados com o uso de colchetes. Verifique quais são os métodos de um Array (a.methods)
Arrays também podem ser criados através do método construtor new da classe Array A definição das células do Array pode se dar em qualquer ordem
[] é um método da classe Array! a[0] -> envio da mensagem [] ao objeto a
Hashes são coleções de chaves que referenciam valores Em ruby, usa-se o símbolo de chaves ({}) para a criação de Hashes Chaves e valores não precisam seguir qualquer padrão de tipagem
Conceito chave do Ruby (e também do Rails) São delimitados por ‘do ... end’ ou ‘{ ... }‘ Entendam blocos como trechos de código passados por parâmetro pra algum método ‘each’ é um método da classe Array que recebe um bloco de código como parâmetro Na implementação do método each, cada elemento do Array é repassado como parâmetro para o bloco de código informado, que é executado a cada ocorrência.
O bloco de código passado para o método each_with_index do objeto Array faz referência a uma variável externa ao bloco. Diz-se que o bloco mantém referência ao seu contexto de origem.
O métodos gets lê uma string da entrada padrão O método chomp da classe String remove o de seu final O método to_i da classe String converte a string em um inteiro
Repare a notação de intervalos no terceiro when
Imprimir números de 1 a 20 Impirimir números ímpares de 1 a 20 Imprimir, em ordem invesa, números ímpares de 1 a 20 Calcular idade a partir da data de nascimento
A diferença entre usar Java e seus frameworks vs Ruby on Rails - http://patrickespake.wordpress.com/2009/01/29/a-diferenca-entre-usar-java-e-seus-frameworks-vs-ruby-on-rails/
RubyGems é uma espécie de apt-get do Ruby.
SQLite é o banco de dados padrão do Rails, mas é possível usar outros, como PostgreSQL, MySQL etc.
Vamos usar a versão 2.2.2 devido à incompatibilidade do JBoss com a última versão, 2.3.2.
No Ubuntu, os binários instalados pelo RubyGems são armazenados em /var/lib/gems/1.8/bin
O Rails implementa o padrão arquitetural MVC, comum em quase todas aplicações Web.
Pelo padrão, o aplicativo é dividido em 3 grandes camadas
Cada camada do padrão MVC responde por um conjunto de responsabilidades Model: manutenção dos dados; regras de negócio; é independente da forma em que os dados são apresentados e da forma em que se dá a entrada de instruções. View: apresenta informações ao usuário; obtém os dados do Model. Controller: recebe as ações do usuário comandadas pela View, geralmente na forma de eventos; Traduz os eventos em solicitações de serviços para o Model ou para a View
Lembre-se disso.
Scaffold é um cadastro básico sobre o qual aplicações complexas são construídas
Na verdade, Scaffold é uma técnica de meta-programação.
Talvez seja preciso atualizar o RubyGems. Será gerada toda infra-estrutura de um CRUD, com Model, Controller, View etc.
Veremos detalhes dessa estrutura mais adiante.
Também falaremos disso mais adiante.
Mas vamos ver o que realmente se passa nesse código gerado.
Toda classe Model do Rails extende ActiveRecord::Base Parte do modelo de entidades do projeto Contém regras de negócio e validações
Recebe dados das Views, coordena a execução do Model e devolve o resultado a alguma outra View Um Controller pode conter vários métodos (Actions)
O mais comum é o Controller buscar dados no Model.
Para exemplificação das Views, vamos fazer mais uma alteração no Controller. Por padrão, todo método do Controller (action) direciona o fluxo de execução para uma View de mesmo nome (e.g. index.html.erb) A View chamada fará uso da variável de instância @agora retornada pela action index do Controller
ERB ~ JSP ~ ASP ~ PHP O valor @agora é colocado no contexto pelo Controller do slide anterior. O nome da View está relacionado com o nome da Action que a invoca
Helpers ajudam as Views a serem mais limpas, favorecendo o princípio DRY - don’t repeat yourself. Cada Controller tem um Helper associado. O nome do Helper está associado ao nome de seu respectivo Controller
Define qual Controller responderá por qual requisição
Existem várias formas de se definir routes, mas o mais indicado é através da estratégia REST map.resources cria rotas padrão baseadas em REST para o controlador informado
A simples instrução map.resources :participantes cria 7 rotas.
O Rails implementa o padrão arquitetural MVC, comum em quase todas aplicações Web.
Como o make do Unix. Como o ant do Java. Automatiza a execução de tarefas repetitivas.
Testes são premissa básica do Rails, presente em suas raízes mais profundas.
Existem 3 tipos de testes Unitários Funcionais Integração
Fixtures: pré-condições para execução de uma suite de teste (e.g. dados no banco) Suites: conjunto de testes executados sob as mesmas Fixtures Assertions: resultados esperados de cada teste da Suite
Migrations têm a ver com evolução de bancos de dados A cada nova release do software, cria-se código para evoluir o banco para esta nova release e também para retroceder o banco para a release anterior, caso necessário.
Numa aplicação Rails existem várias Migrations como esta. Cada Migration ajusta o banco conforme evolução da app (self.up) e possibilita seu retorno ao estado original caso algo dê errado na mudança (seld.down). Na Migration acima, a tabela ‘participantes’ é criada com duas colunas do tipo string (text, varchar, etc): email e nome,
O comando rake db:migrate executa todas as Migrations no banco.
Criar aplicação Rails Explorar os arquivos gerados Criar Scaffold para alguma entidade Criar testes unitários Criar testes funcionais
A forma mais fácil de instalação do JRuby é através de algum gerenciador de pacotes (apt-get, yum, macports...), mas deve-se tomar cuidado com a obsolescência das versões disponíveis.
Ruby é...
“Uma linguagem dinâmica, open source com
foco na simplicidade e na produtividade.Tem
uma sintaxe elegante de leitura natural e
fácil escrita.
http://www.ruby-lang.org/pt/ 5
Instalando Ruby
(Ubuntu)
$ sudo apt-get install ruby irb
Lendo lista de pacotes... Pronto
Construindo árvore de dependências
Lendo estado da informação... Pronto
Os pacotes extra a seguir serão instalados:
irb1.8 libreadline-ruby1.8 libruby1.8 ruby1.8
Pacotes sugeridos:
rdoc1.8 ri1.8 ruby1.8-examples
Os NOVOS pacotes a seguir serão instalados:
irb irb1.8 libreadline-ruby1.8 libruby1.8 ruby ruby1.8
0 pacotes atualizados, 6 pacotes novos instalados,
(...)
Instalando irb (4.1) ...
Instalando ruby (4.1) ...
Processing triggers for libc6 ...
ldconfig deferred processing now taking
$
6
Linguagem de Script
como python, perl e bash
$ ls
Code Library
Sentilla iLiberty+ Payloads
workspace
Desktop Music
Snapshots liferay
Documents Pictures
TryLock.txt pgadmin.log
$ echo "viva a bahia"
viva a bahia
$ i=$(date)
Em BASH, os comandos
$ echo $i podem ser executados no
interpretador (prompt) e o
Sat Mar 21 15:19:37 BRT 2009
resultado obtido
imediatametne...
$ 8
Linguagem de Script
.sh
$ cat teste.sh
ls ... ou os comandos podem
ser todos executados de
echo "viva a bahia" uma só vez (bash script)
i=$(date)
echo $i
$ bash teste.sh
Code Library
Sentilla iLiberty+ Payloads
teste.sh
Desktop Music
Snapshots liferay
Documents Pictures
TryLock.txt pgadmin.log
viva a bahia
Sat Mar 21 15:25:07 BRT 2009
9
$
Interpretador Ruby
irb
$ irb
irb(main):001:0> puts "viva a bahia"
viva a bahia
=> nil
irb(main):002:0> a = 9
=> 9 Assim como no BASH, os
comandos Ruby podem ser
irb(main):003:0> puts a executados no interpretador
(Ruby) e o resultado obtido
9 imediatametne...
=> nil
irb(main):004:0> Time.now
=> Sat Mar 21 15:33:49 -0300 2009
10
Interpretador Ruby
.rb
$ cat teste.rb
puts "viva a bahia"
a = 9
... ou os comandos podem
puts a ser todos executados de
puts Time.now uma só vez (script ruby)
$ ruby teste.rb
viva a bahia
9
Sat Mar 21 15:40:17 -0300 2009
11
então, tudo é objeto e troca
de mensagem entre eles
irb(main):034:0> 1+2
=> 3
irb(main):035:0> 3*5
=> 15
repare que +, -, *, / ...
são métodos do objeto
da classe Fixnum
20
@variable
def
while until
Sintaxe Ruby
for
end
class
do
<
attr_accessor
27
Métodos
def soma a, b
a+b
end
puts soma 3, 4
28
Classe
numero.rb
class Numero
# atributos
# metodos
end
29
Classe
construtor
class Numero
def initialize v
@valor = v
end
end
irb(main):001:0> require 'numero'
=> true
irb(main):002:0> n = Numero.new 1
=> #<Numero:0x54ec0 @v=1>
30
Classe
accessors
class Numero
def initialize v
@valor = v
end
end
irb(main):001:0> require 'numero'
=> true
irb(main):002:0> n = Numero.new 1
=> #<Numero:0x54e98 @valor=1>
irb(main):003:0> n.valor
NoMethodError: undefined method `valor'
for #<Numero:0x54e98 @valor=1>
from (irb):3
31
Classe
accessors
class Numero
def initialize v
@valor = v
end
attr_accessor :valor
end
irb(main):002:0> require 'numero'
=> true
irb(main):003:0> n = Numero.new 1
=> #<Numero:0x500a0 @valor=1>
irb(main):004:0> n.valor
=> 1
32
Classe
herança
funcionario.rb
pessoa.rb
class Pessoa class Funcionario < Pessoa
def initialize nome def initialize n, m
@nome = nome super n
end @matricula = m
end
attr_accessor :nome
attr_accessor :matricula
end
end
require 'pessoa'
require 'funcionario'
p = Pessoa.new 'Alexandre'
puts "A pessoa #{p.nome} foi criada"
f = Funcionario.new 'Ze', '1234'
puts "O funcionario #{f.nome} de matricula #{f.matricula} foi criado" 33
Variáveis
definição
irb(main):001:0> a=1
=> 1
irb(main):002:0> a = 1
=> 1
irb(main):003:0> puts a
1
=> nil
irb(main):004:0> a.class
=> Fixnum
irb(main):005:0> a = "Agilidade"
=> "Agilidade"
irb(main):006:0> a.class
=> String
irb(main):007:0> puts a
Agilidade
=> nil
34
Variáveis
escopo
x variável local
@x variável de instância
@@x variável de classe
$x variável global
35
Booleans
Possíveis valores if a
a = true verdadeiro
a = false falso
a = “qqcoisa” verdadeiro
a = nil falso
a=0 verdadeiro
a=1 verdadeiro
37
Strings
“ ” vs ‘ ’
irb(main):001:0> a = "capoeira"
=> "capoeira"
irb(main):002:0> a.class
=> String
irb(main):003:0> a = 'capoeira'
=> "capoeira"
irb(main):004:0> a.class
=> String
irb(main):005:0> a = 'capoeiranbrasil'
=> "capoeiranbrasil"
irb(main):006:0> puts a
capoeiranbrasil
=> nil
irb(main):007:0> a = "capoeiranbrasil"
=> "capoeiranbrasil"
irb(main):008:0> puts a
capoeira
brasil
=> nil
38
Strings
expansão de variáveis
irb(main):009:0> b = "o valor de 'a' eh #{a}"
=> "o valor de 'a' eh capoeiranbrasil"
39
Strings
múltiplas linhas
irb(main):010:0> a = <<FIM
irb(main):011:0" aqui comeca
irb(main):012:0" um texto
irb(main):013:0" multilinha
irb(main):014:0" que so vai ter fim
irb(main):015:0" quando eu escrever FIM
irb(main):016:0" no inicio da linha
irb(main):017:0" FIM
=> "aqui comecanum textonmultilinhanque so vai ter fim
nquando eu escrever FIMnno inicio da linhan"
irb(main):018:0> puts a
aqui comeca
um texto
multilinha
que so vai ter fim
quando eu escrever FIM
no inicio da linha
=> nil 40
Blocos
irb(main):001:0> a = [ "xp", "scrum", "lean" ]
=> ["xp", "scrum", "lean"]
irb(main):002:0> a.each do |metodo|
irb(main):003:1* puts metodo
irb(main):004:1> end
xp
scrum
lean
=> ["xp", "scrum", "lean"]
46
Closure
irb(main):014:0> a = %w(huguinho zezinho luizinho)
=> ["huguinho", "zezinho", "luizinho"]
irb(main):015:0> x = 1
=> 1
irb(main):016:0> a.each_with_index do |elemento, indice|
irb(main):017:1* puts "x=#{x} e indice=#{indice}"
irb(main):018:1> x = x + indice
irb(main):019:1> end
x=1 e indice=0
x=1 e indice=1
x=2 e indice=2
=> ["huguinho", "zezinho", "luizinho"]
irb(main):020:0> x
=> 4
47
if
puts "Digite um numero: "
STDOUT.flush
a = gets.chomp.to_i
if a == 1
puts "voce digitou 'um'"
elsif a == 2
puts "voce digitou 'dois'"
else
puts "voce digitou um valor desconhecido"
end 48
case
puts "Digite um numero: "
STDOUT.flush
a = gets.chomp.to_i
case a
when 1
puts "voce digitou 'um'"
when 2
puts "voce digitou 'dois'"
when 3..9
puts "voce digitou algo entre tres e nove"
else
puts "voce digitou um valor desconhecido"
end 49
while
cmd = ""
while ! cmd.eql? "sair"
puts "Digite um comando: "
STDOUT.flush
cmd = gets.chomp
end
puts "Voce saiu." 50
for
for i in 1..10
puts i
end
51
labs
1. Imprimir números de 1 a 20
2. Impirimir números ímpares de 1 a 20
3. Imprimir, em ordem invesa, números ímpares de 1 a 20
4. Calcular idade a partir da data de nascimento 52
Instalando RubyGems
$ sudo apt-get install rubygems
Lendo lista de pacotes... Pronto
Construindo árvore de dependências
Lendo estado da informação... Pronto
Os pacotes extra a seguir serão instalados:
libgems-ruby1.8 libopenssl-ruby1.8 rdoc1.8
(...)
Descompactando rubygems (de .../rubygems_0.9.4-4_all.deb) ...
Instalando rdoc1.8 (1.8.6.111-2ubuntu1.2) ...
Instalando libopenssl-ruby1.8 (1.8.6.111-2ubuntu1.2) ...
Instalando libgems-ruby1.8 (0.9.4-4) ...
Instalando rubygems (0.9.4-4) ...
$
http://gems.rubyforge.org 57
$ sudo gem update --system
Updating RubyGems...
Attempting remote update of rubygems-update
Successfully installed rubygems-update-1.3.1
Updating version of RubyGems to 1.3.1
Installing RubyGems 1.3.1
(...)
RubyGems installed the following executables:
/usr/bin/gem1.8
If `gem` was installed by a previous RubyGems
installation, you may need
to remove it by hand.
RubyGems system software updated
$
Certifique-se de que a
última versão do
RubyGem foi instalada
58
$ sudo apt-get install sqlite3
Lendo lista de pacotes... Pronto
Construindo árvore de dependências
Lendo estado da informação... Pronto
(..)
Baixados 19,9kB em 0s (23,6kB/s)
Selecionando pacote previamente não selecionado sqlite3.
(Lendo banco de dados ... 167352 arquivos e diretórios atualmente
instalados.)
Descompactando sqlite3 (de .../sqlite3_3.4.2-2_i386.deb) ...
Instalando sqlite3 (3.4.2-2) ...
Instalando banco de
dados sqlite
59
$ sudo apt-get install build-essential ruby1.8-dev libsqlite3-dev
Lendo lista de pacotes... Pronto
Construindo árvore de dependências
Lendo estado da informação... Pronto
(...)
Descompactando build-essential (de .../build-essential_11.3ubuntu1_i386.deb) ...
Selecionando pacote previamente não selecionado libsqlite3-dev.
Descompactando libsqlite3-dev (de .../libsqlite3-dev_3.4.2-2_i386.deb) ...
Selecionando pacote previamente não selecionado ruby1.8-dev.
Descompactando ruby1.8-dev (de .../ruby1.8-dev_1.8.6.111-2ubuntu1.2_i386.deb) ...
Instalando build-essential (11.3ubuntu1) ...
Instalando libsqlite3-dev (3.4.2-2) ...
Instalando ruby1.8-dev (1.8.6.111-2ubuntu1.2) ...
Instalando dependências
necessárias para o acesso
ao banco via Ruby
60
$ sudo gem install sqlite3-ruby
Building native extensions. This could take a while...
Successfully installed sqlite3-ruby-1.2.4
1 gem installed
Installing ri documentation for sqlite3-ruby-1.2.4...
Installing RDoc documentation for sqlite3-ruby-1.2.4...
Biblioteca do Ruby
para acesso ao banco
de dados sqlite
61
$ sudo gem install rails --version=2.2.2
Successfully installed activesupport-2.2.2
Successfully installed activerecord-2.2.2
Successfully installed actionpack-2.2.2
Successfully installed actionmailer-2.2.2
Successfully installed activeresource-2.2.2
Successfully installed rails-2.2.2
6 gems installed
Installing ri documentation for activesupport-2.2.2...
Installing ri documentation for activerecord-2.2.2...
Installing ri documentation for actionpack-2.2.2...
Installing ri documentation for actionmailer-2.2.2...
Installing ri documentation for activeresource-2.2.2...
Updating ri class cache with 2176 classes...
Installing RDoc documentation for activesupport-2.2.2...
Installing RDoc documentation for activerecord-2.2.2...
Installing RDoc documentation for actionpack-2.2.2...
Installing RDoc documentation for actionmailer-2.2.2...
wInstalling RDoc documentation for activeresource-2.2.2...
Instalando Rails
62
Caso o diretório de binários do
RubyGem não tiver sido acrescentado
ao PATH durante a instalação, faça-o
manualmente.
$ rails -v
O programa 'rails' não está instalado atualmente. Você pode instalá-
lo digitando:
sudo apt-get install rails
-bash: rails: comando não encontrado
$
$
$ echo "export PATH=/var/lib/gems/1.8/bin:$PATH" >> ~/.bash_profile
$ . ~/.bash_profile
$
$ rails -v
Rails 2.2.2
Verificando instalação
do Rails
63
inscricao_evento $ script/server
=> Booting WEBrick...
=> Rails 2.2.2 application started on http://0.0.0.0:3000
=> Ctrl-C to shutdown server; call with --help for options
[2009-03-22 15:46:11] INFO WEBrick 1.3.1
[2009-03-22 15:46:11] INFO ruby 1.8.7 (2008-08-11) [powerpc-darwin8]
[2009-03-22 15:46:11] INFO WEBrick::HTTPServer#start: pid=2655 port=3000
Para testar a app,
inicialize o servidor do
Rails e acesse pelo
browser...
65
Rails é
MVC
66
MVC
View Controller Model
67
MVC
68
MVC
69
Rails é
MVC
70
Conceitos do Rails
Scaffold Routes
Model Tasks
Controller Tests
View Scripts
Helpers Migration
71
Scaffold
C.R.U.D
72
Scaffold
Scaffolding is a meta-programming method of building
database-backed software applications. It is a technique
supported by some model-view-controller frameworks, in which
the programmer may write a specification that
describes how the application database may be used.The
compiler uses this specification to generate code that the
application can use to create, read, update and delete
database entries, effectively treating the template as a
"scaffold" on which to build a more powerful application.
http://en.wikipedia.org/wiki/Scaffold_(programming) 73
$ rake db:create:all
(in /home/sea/alegomes/sea/mkt/inscricao_evento)
$ rake db:migrate
(in /home/sea/alegomes/sea/mkt/inscricao_evento)
== CreateParticipantes: migrating
============================================
-- create_table(:participantes)
-> 0.0045s
== CreateParticipantes: migrated (0.0050s)
===================================
$
Cria estrutura do
banco de dados
76
Cadastro de
participantes pronto
77
Por debaixo dos panos...
78
Model
app/models
79
Controller
app/controllers
O nome do Controller é
usado para acessá-lo
80
Controller
app/controllers
81
Controller
app/controllers
teste_controller.rb
82
View
app/views
index.html.erb
83
Helper
app/helpers
teste_helper.rb
84
Routes
config/routes.rb
HTTP Request Controller.action
GET /participantes/alegomes ParticipantesController.show
http://guides.rubyonrails.org/routing.html 85
Routes
config/routes.rb
86
Routes
config/routes.rb
Verbo HTTP URL Controller Action Descrição
GET /participantes Participantes index Lista todos os participantes
Apresenta formulario para
GET /participantes/new Participantes new
novo cadastro
POST /participantes Participantes create Cria um novo participante
Apresenta um participante
GET /participantes/1 Participantes show
específico
Apresenta formulário para edição
GET /participantes/1/edit Participantes edit dos dados de um participante
Atualiza os dados de um
PUT /participantes/1 Participantes update
participante
Apaga o registro de um
DELETE /participantes/1 Participantes destroy
participante
87
JRuby
“ JRuby is an 100% pure-Java implementation of
the Ruby programming language.
http://jruby.codehaus.org 106
JRuby
“ O JRuby é a implementação 100% em puro
Java da linguagem de programação Ruby. Ou
seja, permite que você rode seus scripts Ruby
na máquina virtual Java
http://ruby-br.org/?p=179 107
Forma mais fácil
de instalação
$ sudo apt-get install jruby
Lendo lista de pacotes... Pronto
Construindo árvore de dependências
Lendo estado da informação... Pronto
(...)
Baixados 3483kB em 10s (334kB/s)
Selecionando pacote previamente não selecionado jruby1.0.
(Lendo banco de dados ... 167406 arquivos e diretórios
atualmente instalados.)
Descompactando jruby1.0 (de .../jruby1.0_1.0.2-2_all.deb) ...
Instalando jruby1.0 (1.0.2-2) ...
$ jruby1.0 -v
ruby 1.8.5 (2008-01-07 rev 4810) [i386-jruby1.0.2]
Instalação e teste do
JRuby
http://wiki.jruby.org/wiki/Getting_Started#QuickStart_with_JRuby 108
$ apt-cache search jruby
jruby0.9 - 100% pure-Java implementation of Ruby
jruby1.0 - 100% pure-Java implementation of Ruby
A última versão dos
repositórios do
Ubuntu é jruby1.0
(obsoleta)
109
$ jruby -S gem list
*** LOCAL GEMS ***
rake (0.8.3)
rspec (1.1.11)
sources (0.0.1)
Teoricamente, tudo o
que podia ser executado
com ruby padrão
(MRI)pode ser executado
também com o jruby...
111
...inclusive, uma
app Rails!
inscricao_evento$ jruby script/server
=> Booting WEBrick
=> Rails 2.3.2 application starting on http://0.0.0.0:3000
JRuby limited openssl loaded. gem install jruby-openssl for full
support.
http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL
/opt/jruby-1.1.6/lib/ruby/gems/1.8/gems/actionpack-2.3.2/lib/
action_controller/middleware_stack.rb:84 warning: given block not used
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2009-03-19 10:19:21] INFO WEBrick 1.3.1
[2009-03-19 10:19:21] INFO ruby 1.8.6 (2008-12-17) [java]
[2009-03-19 10:19:21] INFO WEBrick::HTTPServer#start: pid=8699
port=3000
112
JRubyOnRails
Rails sendo executado sobre
ambiente JRuby.
113
jruby não encontrou a
gem ‘sqlite3’ do banco
[2009-03-21 07:18:36] INFO WEBrick 1.3.1
[2009-03-21 07:18:36] INFO ruby 1.8.6 (2009-03-13) [java]
[2009-03-21 07:18:36] INFO WEBrick::HTTPServer#start: pid=1010 port=3000
/! FAILSAFE /! Sat Mar 21 07:21:05 -0300 2009
Status: 500 Internal Server Error
no such file to load -- sqlite3
114
$ jruby -S gem list
*** LOCAL GEMS ***
actionmailer (2.3.2, 2.2.2)
actionpack (2.3.2, 2.2.2)
activerecord (2.3.2, 2.2.2)
activerecord-jdbc-adapter (0.9.1)
activerecord-jdbcsqlite3-adapter (0.9.1)
activeresource (2.3.2, 2.2.2)
activesupport (2.3.2, 2.2.2)
jdbc-sqlite3 (3.6.3.054)
rails (2.3.2, 2.2.2)
rake (0.8.3)
rspec (1.1.11)
sources (0.0.1)
Realmente, a gem do
sqlite não é listada
115
!
atenção às gems
116
$ jruby -S gem list $ gem list $ sudo gem list $ sudo jruby -S gem list
*** LOCAL GEMS *** *** LOCAL GEMS *** *** LOCAL GEMS *** *** LOCAL GEMS ***
actionmailer (2.3.2) actionmailer (2.2.2) actionmailer (2.2.2) actionmailer (2.3.2)
actionpack (2.3.2) actionpack (2.2.2) actionpack (2.2.2) actionpack (2.3.2)
activerecord (2.3.2) activerecord (2.2.2) activerecord (2.2.2) activerecord (2.3.2)
activeresource (2.3.2) activeresource (2.2.2) activeresource (2.2.2) activeresource (2.3.2)
activesupport (2.3.2) activesupport (2.2.2) activesupport (2.2.2) activesupport (2.3.2)
rails (2.3.2) couchrest (0.12.4) couchrest (0.12.4) rails (2.3.2)
rake (0.8.3) extlib (0.9.10) extlib (0.9.10) rake (0.8.3)
rspec (1.1.11) json (1.1.3) json (1.1.3) rspec (1.1.11)
sources (0.0.1) mime-types (1.16) mime-types (1.16) sources (0.0.1)
mysql (2.7) mysql (2.7)
rails (2.2.2) rails (2.2.2)
rake (0.8.3) rake (0.8.3)
rest-client (0.9) rest-client (0.9)
rspec (1.2.0) rspec (1.2.0)
rubygems-update (1.3.1) rubygems-update (1.3.1)
sqlite3-ruby (1.2.4) sqlite3-ruby (1.2.4)
No Mac, as gems do
jruby são diferentes
das gems do ruby 117
$ jruby -S gem list $ gem list $ sudo gem list $ sudo jruby -S gem list
*** LOCAL GEMS *** *** LOCAL GEMS *** *** LOCAL GEMS *** *** LOCAL GEMS ***
actionmailer (2.3.2) actionmailer (2.3.2) actionmailer (2.3.2) actionmailer (2.3.2)
actionpack (2.3.2) actionpack (2.3.2) actionpack (2.3.2) actionpack (2.3.2)
activerecord (2.3.2) activerecord (2.3.2) activerecord (2.3.2) activerecord (2.3.2)
activeresource (2.3.2) activeresource (2.3.2) activeresource (2.3.2) activeresource (2.3.2)
activesupport (2.3.2) activesupport (2.3.2) activesupport (2.3.2) activesupport (2.3.2)
rails (2.3.2) rails (2.3.2) rails (2.3.2) rails (2.3.2)
rake (0.8.3) rake (0.8.3) rake (0.8.4) rake (0.8.3)
rspec (1.1.11) rspec (1.1.11) sqlite3-ruby (1.2.4) rspec (1.1.11)
sources (0.0.1) sources (0.0.1) sources (0.0.1)
No Linux, apenas o
‘sudo’ do ruby varia as
gems
118
Caso o ambiente jruby não
esteja com todos os pacotes
instalados, instale-os
$ jruby gem install sqlite3-ruby
119
Tentar instalar o
sqlite3 no jruby pode
dar problemas
$ jruby gem install sqlite3-ruby
JRuby limited openssl loaded. gem install jruby-openssl for full
support.
http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL
Building native extensions. This could take a while...
/opt/jruby-1.1.6/lib/ruby/1.8/mkmf.rb:7: JRuby does not support
native extensions. Check wiki.jruby.org for alternatives.
(NotImplementedError)
from /opt/jruby-1.1.6/lib/ruby/1.8/mkmf.rb:1:in `require'
from extconf.rb:1
ERROR: Error installing sqlite3-ruby:
ERROR: Failed to build gem native extension.
/opt/jruby-1.1.6/bin/jruby extconf.rb install sqlite3-ruby
120
Adaptador Java para o
SQlite
$ gem install activerecord-jdbcsqlite3-adapter
JRuby limited openssl loaded. gem install jruby-openssl for full support.
http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL
Successfully installed activerecord-jdbc-adapter-0.9.1
Successfully installed jdbc-sqlite3-3.6.3.054
Successfully installed activerecord-jdbcsqlite3-adapter-0.9.1
3 gems installed
Installing ri documentation for activerecord-jdbc-adapter-0.9.1...
Installing ri documentation for jdbc-sqlite3-3.6.3.054...
Installing ri documentation for activerecord-jdbcsqlite3-adapter-0.9.1...
Installing RDoc documentation for activerecord-jdbc-adapter-0.9.1...
Installing RDoc documentation for jdbc-sqlite3-3.6.3.054...
Installing RDoc documentation for activerecord-jdbcsqlite3-adapter-0.9.1...
121
Rails em Produção
• CGI
• FastCGI
• Mongrel
• mod_rails (Phusion Passenger)
• JRuby
126
warbler
127
128
GlassfishOnRails
“ GlassFish v2 and v3 support JRuby on Rails.
The JRuby Wiki captures the latest info on
JRuby on Rails support on GlassFish.
https://glassfish-scripting.dev.java.net/discover/ 129
GlassfishOnRails
A forma mais fácil de se criar
uma app Rails para o Glassfish
é através da IDE Netbeans.
130
131
132
133
134
135
136
Suporte a
WAR...
...Warble
requerido
137
Sem suporte a
WAR...
...Warble
opcional.
138
Cliue em
‘Finish’ e
aguarde a
criação do
projeto
139
140
Execute a
aplicação
141
142
Aproveitando...
143
Nome do model e
seus atributos
144
145
146
147
Para saber mais...
http://www.netbeans.org/download/flash/jruby_on_rails/jruby_on_rails.html
148
JBossOnRails
“ Thesis: Rails can run well on JBoss
Ruby-on-Rails can run well on JBoss AS. Through
the magic of the JRuby team and Nick Sieger's
JRuby-Rack, running a vanilla Rails app in a servlet
container works.
http://oddthesis.org/theses/jboss-rails 149
150
jboss.org
151
152
153
Instead of building a Ruby
Application Platform from the
ground-up, TorqueBox
leverages the existing ninja-
grade functionality JBoss has
been shipping for years in the
JBoss Application Server.
154
Position : Ruby on Rail Developer
Location : NJ
Duration : 6+ Months
Client is looking for “Ruby on Rail Developer” Experience with Ruby on Rail Developer, Heroku or Engine Factory, ect;
Client is Looking more of an architect on such development methodology but he/she has to know how to code too.
Any experience on Heroku or Engine Factory would be a plus.
Kindly send your resume along with the following information……………………….Please,
FULL NAME:
Best contact number:
Current Location:
Visa Status (US Citizen/GC):
Availability (specify the notice period, if so required):
Expected Hourly / PERANNUM Rate (on W2 Please specify):
Ready to relocate to NJ, if hired for this position (Yes/No):
Ready to Face to Face Interview (Yes/No):
Vijay Bhaskar
Globalnest LLC
281 state Route 79, Suite 208
Morganville, NJ 07751
Voice: (732)-333-4808
Fax: (732) 333-5946
Email: bhaskar@globalnest.com 2 years ago
Position : Ruby on Rail Developer
Location : NJ
Duration : 6+ Months
Client is looking for “Ruby on Rail Developer” Experience with Ruby on Rail Developer, Heroku or Engine Factory, ect;
Client is Looking more of an architect on such development methodology but he/she has to know how to code too.
Any experience on Heroku or Engine Factory would be a plus.
Kindly send your resume along with the following information……………………….Please,
FULL NAME:
Best contact number:
Current Location:
Visa Status (US Citizen/GC):
Availability (specify the notice period, if so required):
Expected Hourly / PERANNUM Rate (on W2 Please specify):
Ready to relocate to NJ, if hired for this position (Yes/No):
Ready to Face to Face Interview (Yes/No): 2 years ago