Truques de console Ruby/Rails que eu sempre esqueço
Compilado de truques que uso no irb e rails console. A maioria são one-liners pra investigar bugs, medir performance ou só deixar o terminal mais agradável.
Listar o histórico do IRB
1
puts Readline::HISTORY.to_a
Útil quando você sabe que digitou algo certo numa sessão anterior mas não lembra exatamente o que era.
Usar link_to direto no console
1
include ActionView::Helpers::UrlHelper
Depois disso link_to "x", "/y" funciona no rails console.
Inspecionar uma rota como o app vê
1
app.users_path
O objeto app no rails console expõe os helpers de rota como se você estivesse num request.
Ver SQL do ActiveRecord no console
1
ActiveRecord::Base.logger = Logger.new STDOUT
A partir daí cada User.where(...) imprime o SQL gerado. Bom pra entender N+1 e índices na hora.
Listar todas as variáveis de ambiente
1
ENV
Sim, é só isso. Mas é exatamente o que se esquece em produção.
Salvar um objeto em JSON pra debugar com calma
1
File.write('public/debug_object.json', offers.to_json)
Depois eu abro no editor com formatação pra entender estruturas grandes.
Medir tempo de uma linha
1
2
3
puts Benchmark.measure {
y = User.all.pluck(:id);
}
Benchmark.measure retorna user/system/total/real time. Boa primeira aproximação antes de partir pra um profiler.
Procurar memory leaks com memory_profiler
1
2
3
4
5
6
require 'memory_profiler'
MemoryProfiler.start
# ... rode aqui o que você quer medir ...
report = MemoryProfiler.stop
report.pretty_print(scale_bytes: true, to_file: 'log/memory_profile.txt')
Gera um relatório com os hotspots de alocação. Ideal pra debug de jobs que crescem em RAM.
Cores no IRB sem gem nenhuma
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def red(str)
"\033[31m#{str}\033[0m"
end
def green(str)
"\033[32m#{str}\033[0m"
end
def blue(str)
"\033[34m#{str}\033[0m"
end
def yellow(str)
"\033[33m#{str}\033[0m"
end
Cole no ~/.irbrc e use puts green("ok") pra destacar saída em scripts longos.
Desinstalar todas as gems da máquina
1
for x in `gem list --no-versions`; do gem uninstall $x -a -x -I; done
Útil quando o sistema de gems vira uma sopa e você quer recomeçar do zero. Cuidado em máquina com Ruby do sistema — prefira fazer dentro de um rbenv/asdf.
Onde achar gems pra um problema novo
ruby-toolbox.com/categories — tem ranking de adoção e atividade por categoria, ajuda a evitar gem abandonada.