2013-08-07 11 views
11

Sto cercando di eseguire il debug di una gemma che è utilizzato da un'applicazione Rails.Usa Pry di gemme senza modificare il Gemfile o utilizzando `require`

ho clonato la Gemma a livello locale per andare in giro indiscreti (e mi permette anche di fare le cose belle, come git bisect, ecc)

# Gemfile 
gem "active_admin", path: "~/dev-forks/active_admin" 

Tuttavia, spesso mi viene bloccato con l'aggiunta di ficcare il naso per un posto dove Gemfile essere in grado di usarlo, o chiamare require "pry" in diretta nel codice anche se non lo voglio lì dentro. Per esempio, a volte mi dimenticherò, correggerò il bug e poi mi impegnerò nel progetto con Pry nel Gemfile.

In caso contrario, verrà generato LoadError, cannot load such file -- pry (LoadError).

Devo amministrare Sono un po 'perso tra i diversi contesti (progetto Rails, Gem, Ruby locale) e gemme reali (Gemfile, richiedono, installato).

Come è possibile utilizzare binding.pry in una gemma all'interno di Rails, senza l'intervento dei file Gemfile?

+3

Ho lo stesso problema anche. Una tecnica che ho considerato (ma non implementata) stava usando git git per verificare le occorrenze di "leva" all'interno del mio codice durante i commit. Quindi, nel file Gemma di Rails, aggiungi il gruppo di sviluppo; nelle gemme, aggiungi il Gemfile (non gemspec). –

+0

I tuoi test unitari dovrebbero fallire anche se hai "curiosare" da qualche parte. –

risposta

1

se si desidera utilizzare e eseguire il debug di una gemma nell'app rotaie, dovrebbe trovarsi nello sviluppo e nel gruppo di test del Gemfile nella propria app.

è possibile utilizzare strumenti come pry-debugger https://github.com/nixme/pry-debugger per impostare i punti di interruzione nella sessione di leva break SomeClass#run.

Penso che sia valido aggiungere leva a tutti i progetti che ho for fork per correggere un bug o contribuire a qualcosa. semplicemente non metterlo nei file .gemspec.

se si stanno spingendo le modifiche binding.pry al repository, è necessario aggiungere ganci di commit come sottolineato da Jim. Non penso che questo sia un problema correlato alla leva, dipende da quanta cura prendi quando rivedi il tuo diff prima di spingerlo fuori.

+0

pry-byebug è anche uno strumento utile: https://github.com/deivid-rodriguez/pry-byebug –

6

Jon dal passato! Come sai, ho le risposte a (quasi) tutti i tuoi problemi.

In questo caso, si sta effettivamente descrivere due problemi: (a) non è possibile require 'pry' quando Pry non è nella Gemfile, (b) Non è possibile utilizzare leva se non require esso.

Cosa Bundler fa, come Conrad Irwin writes:

Bundler è un gioiello impressionante che ti dà un buon grado di fiducia che "se funziona in fase di sviluppo, funziona in produzione". Può farlo essendo un crudele rispetto alle dipendenze delle gemme: se non è nel Gemfile, non viene richiesto. Garantisce inoltre che l'ambiente di sviluppo di tutti sia identico, non più "funziona sulla mia macchina", ma come scusa.

ci sono circostanze in cui questa dedica dogmatica al dovere può ottenere nel modo. In particolare, tutti i bravi sviluppatori hanno impostato personalmente il proprio ambiente di sviluppo. Ovviamente, non è importante che i miei strumenti locali lavorino in produzione, ed è decisamente negativo per la produttività se tutti sono obbligati ad avere una configurazione di sviluppo identica.

Così facendo tutte le cose buone Bundler fa per noi sviluppatori Ruby, si tratta da un design con un avvertimento: "qual è al di fuori del fascio/Gemfile (ad es gemme di sistema) non esiste più."Come lo fa cioè ridefinendo il processo require e cambia il tuo PATH in modo che vede solo ciò che è nel bundle.

Ciò significa che non è possibile utilizzare leva a tutti, senza inquinare l'Gemfile, direte voi, giusto? Non Conrad Irwin è il piccolo biscotto intelligente che è, ha trovato una soluzione e ha fatto Pry Debundle, un gioiello che inverte temporaneamente le patch Bundler fatte su richiesta

Quindi tutto quello che devi fare è solo require 'pry-debundle' quindi , giusto? Oh ... aspetta, sì, Debundle probabilmente non è nel Gemfile

La soluzione per la scimmia è copiare l'origine di pry-debundle.rb a ~/debundle.rb e quindi a load. (Per ora, è necessario caricare Pry per eseguire quel file sorgente, ma è possibile eseguire solo il metodo debundle! per arrivarci, richiedere Pry e andare in giro. È necessario un po 'di monkeypatching, ma sto lavorando a un PR .)