2013-08-07 10 views
11

Próbuję debugować klejnot, który jest używany przez aplikację Rails.Użyj podważania w klejnotach bez modyfikowania pliku Gemfile lub użycia `require`

I sklonowany Gem lokalnie iść ciekawskimi dookoła (a także pozwala mi robić ładne rzeczy takie jak git bisect, etc.)

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

Jestem jednak często skazani dodanie Pry do Gemfile gdzieś być w stanie go używać lub dzwonić pod numer require "pry" na żywo w kodzie, nawet jeśli nie chcę go tam. Na przykład czasami będę o tym zapominał, naprawię błąd, a następnie zobowiązuję się do projektu z Pry w Gemfile.

Jeśli tego nie zrobię, pojawi się LoadError, cannot load such file -- pry (LoadError).

Muszę admin Jestem trochę zagubiony pomiędzy różnymi kontekstami (projekt Rails, Gem, lokalny Ruby) i rzeczywistymi klejnotami (Gemfile, require, installed).

Jak mogę użyć binding.pry w Klejnocie w Railsach, bez interwencji Gemfiles?

+3

Mam ten sam problem. Jedną z technik, którą rozważałem (ale jej nie implementowałem) było używanie haków git do sprawdzania wystąpienia 'pry' w moim kodzie podczas zatwierdzania. Następnie w Gemfile Railsa dodaj informacje do grupy deweloperskiej; w gem, dodaj do Gemfile'a (nie gemspec.). –

+0

Twoje testy jednostkowe również powinny zakończyć się niepowodzeniem, jeśli gdzieś trzymasz "pry". –

Odpowiedz

1

Jeśli chcesz używać i debugować klejnot w swojej aplikacji rails, to powinien znajdować się w grupie rozwojowej i testowej Gemfile w twojej aplikacji.

można użyć narzędzi, takich jak debugger pry https://github.com/nixme/pry-debugger, aby ustawić punkty przerwania w sesji podrzędnej break SomeClass#run.

Uważam, że ważne jest, aby dodać każdy projekt do rozwidlenia, aby naprawić błąd lub przyczynić się. po prostu nie umieszczaj go w plikach .gemspec.

Jeśli naciskasz binding.pry zmiany w repozytorium, powinieneś dodać haki zatwierdzenia, jak wskazał Jim. Nie sądzę, że jest to problem związany z podważeniem, zależy to od tego, jak bardzo będziesz dbał o to, zanim przejdziesz dalej.

+0

pry-byebug to także dobre narzędzie: https://github.com/deivid-rodriguez/pry-byebug –

6

Jon z przeszłości! Jak wiesz, mam odpowiedzi na (prawie) wszystkie twoje problemy.

W tym przypadku opisujesz dwa problemy: (a) nie możesz require 'pry', gdy Pry nie znajduje się w Gemfile, (b) nie możesz użyć Pry, jeśli nie jesteś require go.

Co Bundler, jak Conrad Irwin writes:

Bundler jest niesamowite klejnot, który daje dobry stopień pewności, że „jeśli działa w rozwoju, to działa w produkcji”. Może to zrobić, ponieważ jest błędny w odniesieniu do zależności gem: jeśli nie znajduje się w Gemfile, nie jest wymagany. Zapewnia to również, że środowisko programistyczne każdego użytkownika jest identyczne, nie ma już "pracy na moim komputerze", co jest pretekstem.

Istnieją okoliczności, w których ta dogmatyczna dedykacja do służby może stać na przeszkodzie. W szczególności wszyscy dobrzy programiści bardzo osobiście skonfigurowali swoje środowisko programistyczne. Oczywiście nie jest ważne, że moje lokalne narzędzia pracują w produkcji, a to jest pozytywnie złe dla wydajności, jeśli wszyscy są zmuszeni do stworzenia identycznej konfiguracji.

Więc robiąc wszystkie dobre rzeczy Bundler robi dla nas programistów Ruby, chodzi o projekt z zastrzeżeniem: „co na zewnątrz pakietu/Gemfile (np kamieniem szlachetnym System) nie istnieje już."Jak to robi to poprzez przekształcenie procesu require i zmienia swój PATH tak, że widzi tylko to, co znajduje się w zestawie.

Oznacza to, że nie można użyć Pry w ogóle nie zanieczyszczają Gemfile, można powiedzieć, prawda? Nie Conrad Irwin, który jest sprytnym ciasteczkiem, jakim jest, wymyślił rozwiązanie i zrobił Pry Debundle, klejnot, który tymczasowo odwraca łatki, które Bundler wykonał na nasze żądanie.

Wszystko, co musisz zrobić, to tylko require 'pry-debundle' , prawda? Oh ... poczekaj ... Tak, Debundle prawdopodobnie nie jest w Gemfile

Poprawka małpy polega na wydrukowaniu źródła pry-debundle.rb do ~/debundle.rb, a następnie load, że. (Na razie potrzebujesz Pry załadowanego do uruchomienia tego pliku źródłowego, ale możesz uruchomić tylko metodę debundle!, aby się tam dostać, wymagać Pry i podążać ciekawie.) Potrzebuję trochę monkeypatchingu, ale pracuję nad PR .)

Powiązane problemy