Usando pry-remote para depurar no Vagrant VM

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.prychamada 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.prypara binding.remote_prye quando
seu servidor de aplicativos acessar o depurador, conecte-se ao processo em segundo plano usando o
pry-remotecomando. 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!