A saga de recuperação de um
Software de Webcidadania
Slide 2
Slide 2 text
No content
Slide 3
Slide 3 text
★ 14k usuários
★ 5k propostas e problemas
★ 12k comentários
★ 25k apoios
dados de 21 de abril de 2013
Slide 4
Slide 4 text
Tempo de resposta do
servidor
Slide 5
Slide 5 text
Quem sou
Codeminer 42
jcemer
jcemer
Jean Carlo Emer
Slide 6
Slide 6 text
Cenário inicial
★ Ruby on Rails 2.3 (março de 2009)
★ Ruby 1.8
★ MySQL
★ Linode (uma única máquina)
Slide 7
Slide 7 text
Ruby on Rails
★ Surgiu do Basecamp, produto da 37 Signals
★ Framework Open Source para aplicações web
★ Padrão Model-View-Controller
Slide 8
Slide 8 text
Vamos recuperar!
Slide 9
Slide 9 text
Metodologia
★ Projeto de escopo aberto
★ Fork privado do projeto no GitHub
★ Entregas constantes
★ Deploy automatizado
Slide 10
Slide 10 text
No content
Slide 11
Slide 11 text
Como monitorar?
★ New Relic
★ Análise de performance
★ Monitoramento dos servidores
★ Performance de SQL
★ Alerta de erros e perda de performance
Slide 12
Slide 12 text
No content
Slide 13
Slide 13 text
Banco de dados
sobrecarregado
★ Pesquisas ao banco não incluíam os models
dependentes
★ Novas queries eram necessárias para
complementar os registros (N+1)
★ Cache das queries mais custosas
★ Queries mal escritas...
Slide 14
Slide 14 text
Queries Problemáticas
Slide 15
Slide 15 text
Servidor do banco de dados
★ Adoção de um servidor exclusivo para o banco
de dados
★ Aplicação bastante baseada em pesquisa e
combinação de resultados
★ Tuning do banco de dados
Slide 16
Slide 16 text
No content
Slide 17
Slide 17 text
Testes!
★ As aplicações vão crescendo e adquirindo
complexidade
★ Inviável testar manualmente toda a aplicação
a cada nova funcionalidade ou refatoração
★ O Cidade Democrática não tinha nenhum teste
Slide 18
Slide 18 text
Por onde começar a testar?
★ Reescritas críticas de código sempre
começavam pela criação dos testes
★ Novas funcionalidades com cobertura
total de testes
★ Testes de funcionalidade com os
principais casos de uso...
Slide 19
Slide 19 text
No content
Slide 20
Slide 20 text
Integração contínua
★ Con guração do Travis
★ A cada push no repositório, os testes são
rodados no serviço
★ Garantia de código sempre passando nos testes
★ Apoio para validar correção de Pull Requests
Slide 21
Slide 21 text
No content
Slide 22
Slide 22 text
Servidor de staging
★ Servidor dedicado para testar e depurar novas
versões da aplicação
★ Con guração de máquina e ambiente iguais às
de produção
★ Todo o deploy é feito antes para o servidor de
Staging
Slide 23
Slide 23 text
Qualidade de código
★ Code Climate
★ Suíte de ferramentas de análise estática
★ Métricas de complexidade
★ Identi ca código duplicado ou fonte de
ataque
Slide 24
Slide 24 text
No content
Slide 25
Slide 25 text
No content
Slide 26
Slide 26 text
Mãos ao código!
Slide 27
Slide 27 text
★ Projeto original com Rails plugins
★ Rails 3.0 introduz o uso do
★ Dependências indicadas em um arquivo
Gem le
★ As Gems sempre serão as certas sem
precisar versionar seu código no projeto
Dependências
Slide 28
Slide 28 text
Entrega de e-mails
★ Cerca de 400 e-mails por dia
★ Fila de e-mails
★ Envio fora do uxo da aplicação
Slide 29
Slide 29 text
Autenticação dos usuários
★ Sistema de autenticação defasado
★ Gem Devise para autenticação
★ Diferentes permissões para os usuários
★ Suporte a Omniauth (login via Facebook)
Slide 30
Slide 30 text
Autenticação através do
Facebook
★ Criar a app no Facebook
★ Con gurar uma rota de destino na aplicação
★ Adicionar chave secreta e identi cador da
app
Slide 31
Slide 31 text
Concursos no Cidade
Democrática
Slide 32
Slide 32 text
O que são os concursos?
★ Nova seção do Cidade Democrática
★ Etapas de inspiração, propostas, aplausos,
união, anúncio
★ Na fase de união, duas propostas podem ser
uni cadas formando uma terceira
Slide 33
Slide 33 text
Entregas
★ Não teríamos tempo de entregar o concurso
completo antes da data de início prevista
★ O concurso possui etapas que foram
codi cadas progressivamente
Slide 34
Slide 34 text
Desenvolvimento dos
concursos
★ Desenvolvimento guiado a testes
★ Uso de Gems mais novas
★ Melhor organização do código
Slide 35
Slide 35 text
Resultado
Slide 36
Slide 36 text
Evolução da plataforma
Inicial Atual
Linguagem
Framework
Cache
Monitor
Integração
Qualidade
Ruby 1.8 Ruby 2.0
Ruby on Rails 2.3 Ruby on Rails 3.2
- Memcached
- New Relic
- Travis
- Code Climate
Slide 37
Slide 37 text
Qualidade de código
★ Em mais de 1.5k commits progredimos muito
★ Dá para melhorar mais, nossos outros projetos
possuem GPA quase 4.0