SlideShare uma empresa Scribd logo
1 de 70
Baixar para ler offline
Efficient Rails
Fabio Perrella
Agenda
- Dicas de...
- Terminal
- Git
- Rails Console
- Editor
- Dicas de Código
- Models
- Views
- Assets
- Mailers
- Testes
Terminal
Não use o terminal default
- Terminator, iTerm2
- Zsh > Bash
FASD
https://github.com/clvv/fasd
Acesso rápido a arquivos e diretórios
HTTPIE
https://github.com/jkbrzt/httpie
Cliente de http amigável (comparado ao curl)
Git
Prompt colorido
https://github.com/fabioperrella/dotfiles/blob/master/dotfiles/.gitpromptrc
Git lg (pretty log)
https://github.com/fabioperrella/dotfiles/blob/master/dotfiles/.gitconfig#L8
Git prepare-commit hook (add nome da branch)
fabioperrella.blogspot.com/2014/03/adicionando-o-nome-do-branch-em-todos.html
Git - Limpeza de branches
https://gist.github.com/fabioperrella/1f56229a4c532fc000ed
- Limpa diretórios locais e remotos ja mergeados no master
Dotfiles
https://github.com/fabioperrella/dotfiles
Baseado no https://dotfiles.github.io
Git - Toggle branches
git checkout -
cd -
Rails Console
Use o .pryrc para comandos frequentes
ActiveRecord lazy loading no console
Atalhos
Bundle show/open
Bundle local path
http://ryanbigg.com/2013/08/bundler-local-paths/
Gem jazz_hands
Rails console + bonito/eficiente
https://github.com/nixme/jazz_hands
- Pry
- Pry-debugger
- Awesome Print
- Hirb
...
Rails console --sandbox
- Nenhuma query é comitada
Editor (Sublime)
Atalhos para agilizar a vida
- Goto Definition (F12) (só no sublime3)
- Jump Back (Alt + -)
- Go (and back) to spec (Ctrl + .) (plugin)
- Switch project (Ctrl + Alt + p)
- Go to anything (Ctrl + p)
- Go to symbol (Ctrl + r)
- Comandos (Ctrl + shift + p)
- Ctrl + Shift + v (paste and indent)
Plugins
- RailsGoToSpec
- SideBarEnhancements
- All Autocomplete
- GitGutter
Snippets customizados
Byebug (bb)
~.config/sublime-text-3/Packages/User/byebug.sublime-snippet
Dicas de Código - Models
Gem annotate
https://github.com/ctran/annotate_models
Gera e atualiza schema info nos modelos
Detectando N+1
Gem bullet
https://github.com/flyerhzm/bullet
Detecta N+1 por heurística, loga ou lança exceção quando achar
Gem rails-footnotes
Mostra informações sobre a página como:
- Queries
- Variáves de sessão
- Cookies
- Variáves de instancia no controller
- Parâmetros
- etc...
Foreign Key nas migrations
A partir do rails 4.2
Gem immigrant
https://github.com/jenseng/immigrant
Gera foreign keys que foram esquecidas
Immigrant:check_keys
Dicas de Views
Partials reusáveis
Muitas variáveis de instância nas actions são “bad smells”
Regras para seguir:
1) Só utilizar 1 variável de instância por action
2) Partial só pode usar variáveis através do locals
3) Documentar cada variável necessária na partial
Só utilizar 1 variável de instância por action
Gem cells
https://github.com/apotonick/cells
View models
Partial só pode usar variáveis através do locals
Dicas de assets
Gem quiet_assets
Gem lograge
Gem autoprefixer-rails
Dicas sobre Mailers
Organização das views
Gem letter_opener ou mailcatcher
LetterOpener:
- Ao disparar email, abre browser com html renderizado
Mailcatcher:
- Sobe SMTP fake para capturar email
- Sobre webmail leve para visualizar
Validação de emails
/^(?=[A-Z0-9][A-Z0-9@._%+-]{5,253}+$)[A-Z0-9._%+-]{1,64}+@(?:(?=[A-Z0-
9-]{1,63}+.)[A-Z0-9]++(?:-[A-Z0-9]++)*+.){1,8}+[A-Z]{2,63}+$/
Solução:
- Só validar se contém “@” ?
Dicas de Testes
Gem zeus ou spring
Acelera (fazendo cache) carregamento da aplicação
Bom para:
- Rodar testes
- Entrar no console
- Subir servidor
- Rodar rakes
Muito simples de usar (zeus)
Rspec only failures
Testes rápidos e sem dependência de ordem
Gem parallel_tests
Roda testes em paralelo
Necessita múltiplas instâncias de banco
Cuidado se testes dependem de algum outro recurso como redis/memcache
Debugging
Gem pry-byebug
Comandos:
- Next
- Continue
- Step
.pryrc
Fim
Dúvidas??
@fabioperrella

Mais conteúdo relacionado

Destaque

Real Time with Rails 5
Real Time with Rails 5Real Time with Rails 5
Real Time with Rails 5Lucas Renan
 
Ruby on Rails 5: Top 5 Features
Ruby on Rails 5: Top 5 FeaturesRuby on Rails 5: Top 5 Features
Ruby on Rails 5: Top 5 FeaturesPhraseApp
 
Rails 5 – Amsterdam.rb – Uberous
Rails 5 – Amsterdam.rb – UberousRails 5 – Amsterdam.rb – Uberous
Rails 5 – Amsterdam.rb – UberousJeroen Visser
 
[Srijan Wednesday Webinar] Rails 5: What's in It for Me?
[Srijan Wednesday Webinar] Rails 5: What's in It for Me?[Srijan Wednesday Webinar] Rails 5: What's in It for Me?
[Srijan Wednesday Webinar] Rails 5: What's in It for Me?Srijan Technologies
 

Destaque (6)

Real Time with Rails 5
Real Time with Rails 5Real Time with Rails 5
Real Time with Rails 5
 
Ruby on Rails 5: Top 5 Features
Ruby on Rails 5: Top 5 FeaturesRuby on Rails 5: Top 5 Features
Ruby on Rails 5: Top 5 Features
 
Rails 5 – Amsterdam.rb – Uberous
Rails 5 – Amsterdam.rb – UberousRails 5 – Amsterdam.rb – Uberous
Rails 5 – Amsterdam.rb – Uberous
 
[Srijan Wednesday Webinar] Rails 5: What's in It for Me?
[Srijan Wednesday Webinar] Rails 5: What's in It for Me?[Srijan Wednesday Webinar] Rails 5: What's in It for Me?
[Srijan Wednesday Webinar] Rails 5: What's in It for Me?
 
What's New in Rails 5
What's New in Rails 5What's New in Rails 5
What's New in Rails 5
 
What's new on Rails 5
What's new on Rails 5What's new on Rails 5
What's new on Rails 5
 

Semelhante a Efficient rails

Viajando no Tempo com GIT: Controle de versão para quem quer dormir em paz
Viajando no Tempo com GIT: Controle de versão para quem quer dormir em pazViajando no Tempo com GIT: Controle de versão para quem quer dormir em paz
Viajando no Tempo com GIT: Controle de versão para quem quer dormir em pazFlávio Lisboa
 
Use o git e perca o medo de errar
Use o git e perca o medo de errarUse o git e perca o medo de errar
Use o git e perca o medo de errarBruno Calheira
 
Controlo de Versões Distribuído com Git
Controlo de Versões Distribuído com GitControlo de Versões Distribuído com Git
Controlo de Versões Distribuído com GitC. Augusto Proiete
 
Controlo de Versões Distribuído com Git - C. Augusto Proiete
Controlo de Versões Distribuído com Git - C. Augusto ProieteControlo de Versões Distribuído com Git - C. Augusto Proiete
Controlo de Versões Distribuído com Git - C. Augusto ProieteComunidade NetPonto
 
Falhando miseralvelmente com PHP
Falhando miseralvelmente com PHPFalhando miseralvelmente com PHP
Falhando miseralvelmente com PHPAugusto Pascutti
 
Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)Danilo Pinotti
 
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019Tchelinux
 
Extraindo métricas em testes de performance
 Extraindo métricas em testes de performance Extraindo métricas em testes de performance
Extraindo métricas em testes de performanceFlávio Pimenta
 
Html5 pt - Offline Apps
Html5 pt - Offline AppsHtml5 pt - Offline Apps
Html5 pt - Offline AppsByclosure
 
Controle de Versões com Git
Controle de Versões com GitControle de Versões com Git
Controle de Versões com GitVagner Santana
 
Minicurso GIT 2022 - SENAC
Minicurso GIT 2022 - SENACMinicurso GIT 2022 - SENAC
Minicurso GIT 2022 - SENACDanilo Pinotti
 
Controle de Versão com Git e como Otimizar seu Workflow com Git Flow
Controle de Versão com Git e como Otimizar seu Workflow com Git FlowControle de Versão com Git e como Otimizar seu Workflow com Git Flow
Controle de Versão com Git e como Otimizar seu Workflow com Git FlowLucas Araújo Mezêncio
 
Git workshop
Git workshopGit workshop
Git workshopYuri Reis
 
Git - Rápido, seguro, eficiente
Git - Rápido, seguro, eficienteGit - Rápido, seguro, eficiente
Git - Rápido, seguro, eficienteWaldyr Felix
 
Hyper Text Transfer Protocol (HTTP)
Hyper Text Transfer Protocol (HTTP)Hyper Text Transfer Protocol (HTTP)
Hyper Text Transfer Protocol (HTTP)elliando dias
 
Project HA
Project HAProject HA
Project HAKarpv
 

Semelhante a Efficient rails (20)

Viajando no Tempo com GIT: Controle de versão para quem quer dormir em paz
Viajando no Tempo com GIT: Controle de versão para quem quer dormir em pazViajando no Tempo com GIT: Controle de versão para quem quer dormir em paz
Viajando no Tempo com GIT: Controle de versão para quem quer dormir em paz
 
Use o git e perca o medo de errar
Use o git e perca o medo de errarUse o git e perca o medo de errar
Use o git e perca o medo de errar
 
Sapo Sessions PHP
Sapo Sessions PHPSapo Sessions PHP
Sapo Sessions PHP
 
Controlo de Versões Distribuído com Git
Controlo de Versões Distribuído com GitControlo de Versões Distribuído com Git
Controlo de Versões Distribuído com Git
 
Controlo de Versões Distribuído com Git - C. Augusto Proiete
Controlo de Versões Distribuído com Git - C. Augusto ProieteControlo de Versões Distribuído com Git - C. Augusto Proiete
Controlo de Versões Distribuído com Git - C. Augusto Proiete
 
Falhando miseralvelmente com PHP
Falhando miseralvelmente com PHPFalhando miseralvelmente com PHP
Falhando miseralvelmente com PHP
 
Git 101
Git 101Git 101
Git 101
 
Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)
 
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019
Git em pequenos projetos - Sandro Custódio - Tchelinux Livramento 2019
 
Controle de versão e colaboração com Git
Controle de versão e colaboração com GitControle de versão e colaboração com Git
Controle de versão e colaboração com Git
 
Extraindo métricas em testes de performance
 Extraindo métricas em testes de performance Extraindo métricas em testes de performance
Extraindo métricas em testes de performance
 
Html5 pt - Offline Apps
Html5 pt - Offline AppsHtml5 pt - Offline Apps
Html5 pt - Offline Apps
 
Controle de Versões com Git
Controle de Versões com GitControle de Versões com Git
Controle de Versões com Git
 
Minicurso GIT 2022 - SENAC
Minicurso GIT 2022 - SENACMinicurso GIT 2022 - SENAC
Minicurso GIT 2022 - SENAC
 
Controle de Versão com Git e como Otimizar seu Workflow com Git Flow
Controle de Versão com Git e como Otimizar seu Workflow com Git FlowControle de Versão com Git e como Otimizar seu Workflow com Git Flow
Controle de Versão com Git e como Otimizar seu Workflow com Git Flow
 
Git workshop
Git workshopGit workshop
Git workshop
 
Conhecendo o GIT
Conhecendo o GITConhecendo o GIT
Conhecendo o GIT
 
Git - Rápido, seguro, eficiente
Git - Rápido, seguro, eficienteGit - Rápido, seguro, eficiente
Git - Rápido, seguro, eficiente
 
Hyper Text Transfer Protocol (HTTP)
Hyper Text Transfer Protocol (HTTP)Hyper Text Transfer Protocol (HTTP)
Hyper Text Transfer Protocol (HTTP)
 
Project HA
Project HAProject HA
Project HA
 

Mais de fabio perrella

Boas práticas e sobrevivência com vcr no rspec
Boas práticas e sobrevivência com vcr no rspecBoas práticas e sobrevivência com vcr no rspec
Boas práticas e sobrevivência com vcr no rspecfabio perrella
 
Deixando o código mais amigável para as próximas gerações
Deixando o código mais amigável para as próximas geraçõesDeixando o código mais amigável para as próximas gerações
Deixando o código mais amigável para as próximas geraçõesfabio perrella
 
Deixando o codigo_mais_amigavel_para_as_proximas_geracoes
Deixando o codigo_mais_amigavel_para_as_proximas_geracoesDeixando o codigo_mais_amigavel_para_as_proximas_geracoes
Deixando o codigo_mais_amigavel_para_as_proximas_geracoesfabio perrella
 
Qconsp 2016 escalando uma plataforma de e-mail transacional- aprendizado da...
Qconsp 2016   escalando uma plataforma de e-mail transacional- aprendizado da...Qconsp 2016   escalando uma plataforma de e-mail transacional- aprendizado da...
Qconsp 2016 escalando uma plataforma de e-mail transacional- aprendizado da...fabio perrella
 
[Campus code] Boas práticas em Rails
[Campus code] Boas práticas em Rails[Campus code] Boas práticas em Rails
[Campus code] Boas práticas em Railsfabio perrella
 
No sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodbNo sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodbfabio perrella
 
Coisas que aprendemos usando Mongoid com grande quantidade de dados
Coisas que aprendemos usando Mongoid com grande quantidade de dadosCoisas que aprendemos usando Mongoid com grande quantidade de dados
Coisas que aprendemos usando Mongoid com grande quantidade de dadosfabio perrella
 

Mais de fabio perrella (8)

Boas práticas e sobrevivência com vcr no rspec
Boas práticas e sobrevivência com vcr no rspecBoas práticas e sobrevivência com vcr no rspec
Boas práticas e sobrevivência com vcr no rspec
 
Deixando o código mais amigável para as próximas gerações
Deixando o código mais amigável para as próximas geraçõesDeixando o código mais amigável para as próximas gerações
Deixando o código mais amigável para as próximas gerações
 
Deixando o codigo_mais_amigavel_para_as_proximas_geracoes
Deixando o codigo_mais_amigavel_para_as_proximas_geracoesDeixando o codigo_mais_amigavel_para_as_proximas_geracoes
Deixando o codigo_mais_amigavel_para_as_proximas_geracoes
 
Qconsp 2016 escalando uma plataforma de e-mail transacional- aprendizado da...
Qconsp 2016   escalando uma plataforma de e-mail transacional- aprendizado da...Qconsp 2016   escalando uma plataforma de e-mail transacional- aprendizado da...
Qconsp 2016 escalando uma plataforma de e-mail transacional- aprendizado da...
 
[Campus code] Boas práticas em Rails
[Campus code] Boas práticas em Rails[Campus code] Boas práticas em Rails
[Campus code] Boas práticas em Rails
 
Ruby profiling
Ruby profilingRuby profiling
Ruby profiling
 
No sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodbNo sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodb
 
Coisas que aprendemos usando Mongoid com grande quantidade de dados
Coisas que aprendemos usando Mongoid com grande quantidade de dadosCoisas que aprendemos usando Mongoid com grande quantidade de dados
Coisas que aprendemos usando Mongoid com grande quantidade de dados
 

Efficient rails