Postado originalmente em codecrate.com
O Vagrant é incrível e uma
parte absolutamente essencial de todo ambiente de desenvolvimento. Executando o seu aplicativo dentro de uma
máquina virtual vagabundo faz introduzir alguns desafios embora …
Um problema particularmente desagradável que encontrei recentemente foi tentar depurar algum código usando
minha ferramenta de depuração Ruby favorita, Pry .
O problema era que meu aplicativo foi iniciado dentro da VM usando um
gerenciador de processos Linux (Ubuntu upstart), o que significa que o processo é bifurcado em
segundo plano e não é possível interromper o processo para iniciar uma
sessão de depuração usando a binding.pry
chamada padrão .
Pry-remote para o resgate!
A depuração de processos em segundo plano requer o uso da gem
pry-remote que
foi projetada para este caso de uso exato. Tudo o que você precisa fazer é
trocar as chamadas de método de binding.pry
para binding.remote_pry
e quando
seu servidor de aplicativos acessar o depurador, conecte-se ao processo em segundo plano usando o pry-remote
comando. Voila!
Conectando a partir do sistema operacional host
Agora, depurar o processo do aplicativo em segundo plano é incrível, mas há um problema
com essa configuração … ela só funciona na
máquina virtual convidada . Isso é muito chato para mim, já que gosto de usar meu sistema operacional host para
comandos e ferramentas de terminal .
O Vagrant suporta o encaminhamento de portas do sistema operacional host para o convidado, mas isso
não funciona neste caso, pois o gem pry-remote abre uma porta aleatória
cada vez que o depurador é acionado.
Para contornar esse problema, eu uso este script de shell simples que automatiza a
conexão com a máquina virtual e inicializa o pry-remote.
#!/bin/bash
# connect to application within virtual machine to debug running process
# binding.remote_pry should be used to trigger breakpoints
vagrant ssh -c 'cd /vagrant && bundle exec pry-remote'
Esta solução combina a grandiosidade de depurar aplicativos com pry com
a conveniência de não precisar fazer o ssh manualmente na máquina virtual o
tempo todo!