Este documento discute boas e más práticas de aplicações Ruby em ambientes corporativos. Ele aborda tópicos como estratégias de teste, lidando com dados em múltiplas plataformas, Capistrano, REST e mais. O documento fornece conselhos práticos baseados na experiência dos autores para ajudar desenvolvedores a evitar armadilhas comuns e produzir software Ruby de qualidade em ambientes corporativos.
2. DANILO SATO
Lead Consultant
Líder Técnico
Arquiteto
DevOps
Coach
Treinador
SP, Londres, Chicago
@dtsato
3. CARLOS VILLELA
Lead Consultant
Líder Técnico
Velho Chato
Arquiteto
DevOps
Inovação Contínua
SP, Londres, Porto Alegre
@cv
4.
5. ENTERPRISE
IN-TER-PRÁI-ZI
Uma empresa que não é uma start-up, seguindo processos que não são
Lean.
Mas você tem contas pra pagar e vai trabalhar lá.
6. AUTÓPSIAS
Atropelamento por bolas de lama
Montanhas de pepinos
Morte por # f e
idf
Asfixia por DBAs
Estupro remoto de servidores
Alucinações e flashbacks do J2EE
8. EXPLOSÃO DE CÓDIGO
“Por trás de toda má ideia tem sempre uma boa
intenção”
9. EXPLOSÃO DE CÓDIGO
Abuso de monkey-patching
Forks pessoais
Deixar upgrades para depois
Forçar o Rails além do seu limite
The Rails Way is the only way
10. EXPLOSÃO DE CÓDIGO
Teste seus monkey-patches
Extraia gems para facilitar a manutenção
EXPLOSÃO DE CÓDIGO
Pense além do model/view/controller/helper
Limite o número de pontos de integração
Bom design OO: crie abstrações úteis
Algo entre F o
oe
AsrcBsFoigeoFcoyenml
btataeoSnltnatrBaIp
11. ESTRATÉGIAS DE TESTE
Cnro Uurofzlgncmscso
eái: sái a oi o ues
Dd qeetun pgn d lgn
ao u so a áia e oi
Qad e penh ocmo"oed uuro cm"sr
uno u reco ap nm e sái" o ue"
Ee penh ocmo"eh"cm"3rt
u reco ap sna o sc3"
Ee cion bto"oi"
u lc o oã Lgn
Etoe vupr ahmpg cmuamnae d scso"oi eeud cms
nã u o aa oeae o m esgm e ues Lgn ftao o
ues"
cso
12. ESTRATÉGIAS DE TESTE
Gerenciar teste funcionais por história
Abuso no uso de mocks
Re-testar o framework
Mockar o objeto sendo testado
Ter um time separado cuidando dos testes
Investir em automação de teste de UI
Testes só rodam em um determinado ambiente
13. ESTRATÉGIAS DE TESTE
Testes funcionais de user journeys e não por história
Muito mais testes unitários do que testes funcionais
ESTRATÉGIAS DE TESTE
Todo mundo é dono dos testes
Código de teste também é código
Evite acoplar testes com um determinado ambiente
14. RUBY EM MÚLTIPLAS
PLATAFORMAS
“ Ruby is highly portable: it is developed mostly on
GNU/Linux, but sort of works on many types of
UNIX, Mac OS X, Windows 95/98/Me/NT/2000/XP,
DOS, BeOS, OS/2, etc. ”
15. RUBY EM MÚLTIPLAS PLATAFORMAS
Desenvolver em ambiente/plataforma diferente
Usar infra diferente (BD, jobs, in-memory)
Falta de cuidado com gems nativas
Múltiplos encodings
Linebreak/whitespace wars
RVM em produção
16. RUBY EM MÚLTIPLAS PLATAFORMAS
Bundler
Vendorize tudo
RUBY EM MÚLTIPLAS PLATAFORMAS
JRuby
Crie ambientes parecidos com produção
UTF-8 no stack inteiro
Você não quer rodar GCC em produção, IT Ops agradece
vgatris
arn_al
Mingle , Go : JRuby e pacotes para diversos SOs
18. LIDANDO COM DADOS
Forçar ActiveRecord num schema que você não controla
Usar vários BDs na mesma aplicação
SQLServer
Usar NoSQL como RDBMS
19. LIDANDO COM DADOS
Divida em aplicações/serviços menores
Defina quem tem posse dos dados
LIDANDO COM DADOS
Representantes do negócio em decisões arquiteturais
Considere usar processos ETL
Teste!
20. CAPISTRANO
DSL para executar sequências de comandos em máquinas remotas de
acordo com roles.
Amplamente utilizado para fazer deployment de aplicações Rails.
#cppouto dpo mse
a rdcin ely atr
21. CAPISTRANO
Multiplexação de conexões SSH
Referenciar servidores através de papéis (roles)
CAPISTRANO
DSL Ruby, boa integração com Rake, etc.
Fácil de automatizar deployments e trocar receitas
22. CAPISTRANO
Encoraja deployments…
…fora da integração contínua
…direto do controle de versão
Branches para ajustes de produção
Ciclo de vida complicado (Maven, alguém?)
Processos difíceis de auditar
23. CAPISTRANO: ALTERNATIVAS
Não usar o ciclo de vida padrão
Empacotar aplicação usando RPM, DEB, etc
Receitas fáceis de escrever
Evoluem desde os anos 90
IT Ops friendly :)
Use Cap para instalar os RPM/DEB/etc em ambientes
24. REST
Estilo arquitetural bem difundido em APIs web recentes.
Aplicações feitas da web, e não apenas para a web.
ENTITY EJB 1.X
Inferno.
26. ENTITY EJB 1.X
Granularidade errada
Performance horrenda (e pilhas de hacks)
Deployments sofríveis, upgrades tensos
Muito difícil de usar bem
Literatura cheia de péssimos exemplos
27. REST, RUIM
Granularidade errada
Performance horrenda (e pilhas de hacks)
Deployments sofríveis, upgrades tensos
Literatura cheia de exemplos questionáveis (Rails API)
Caching fora do HTTP
28. REST
Documentos e representações (vs. 'DB em JSON')
Transições de estado (vs. RPC)
REST
Estados de erro bem definidos e testados
Fail-over bem definido e testado
Upgrades oferecem retro-compatibilidade
Caching e de-caching óbvios (HTTP)
29. Q&A?
DIRETO DAS TRINCHEIRAS
BOAS E MÁS PRÁTICAS DE APLICAÇÕES RUBY EM AMBIENTES
CORPORATIVOS
BOAS Danilo Sato @dtsato
Carlos Villela @cv