2013-08-07 7 views
11

Ich versuche ein Juwel zu debuggen, das von einer Rails App verwendet wird.Verwenden Sie Pry in Gems, ohne die Gemdatei zu ändern oder `require` zu ​​verwenden.

ich geklont den lokal Gem neugierigen um zu gehen (und erlaubt es mir auch schöne Dinge wie git bisect etc. zu tun) mit dem Hinzufügen von Pry zu einem Gemfile irgendwo

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

Allerdings bin ich oft stecken in der Lage sein, es zu verwenden, oder require "pry" live im Code aufrufen, obwohl ich es dort nicht wollen. Zum Beispiel werde ich es manchmal vergessen, den Fehler beheben und dann mit Pry in das Gemfile in das Projekt gehen.

Sollte ich das nicht tun, wird eine LoadError entstehen, cannot load such file -- pry (LoadError).

Ich muss Admin Ich bin ein wenig verloren zwischen den verschiedenen Kontexten (Rails-Projekt, Gem, lokale Ruby) und tatsächliche Edelsteine ​​(Gemfile, erfordern, installiert).

Wie kann ich binding.pry in einem Gem in Rails, ohne Eingriff der Gemfiles verwenden?

+3

Ich habe das gleiche Problem auch. Eine Technik, die ich in Erwägung zog (aber nicht implementierte), war die Verwendung von Git-Hooks, um während des Commits nach dem Auftreten von 'py' in meinem Code zu suchen. Dann fügen Sie in Rails 'Gemfile der Entwicklungsgruppe einen Hebel hinzu. in Edelsteinen fügen Sie der Gemfile (nicht Gemspec) hinzu. –

+0

Ihre Komponententests sollten auch fehlschlagen, wenn Sie irgendwo irgendwo stecken. –

Antwort

1

Wenn Sie ein Juwel in Ihrer Rails App verwenden und debuggen möchten, dann sollte es in der Entwicklungs- und Testgruppe der Gemfile in Ihrer App sein.

Sie können Tools wie Pry-Debugger https://github.com/nixme/pry-debugger verwenden, um Haltepunkte in Ihrer Sitzung Sitzung break SomeClass#run setzen.

Ich denke, es ist gültig, jedem Projekt, das ich ausarbeite, um einen Fehler zu beheben oder Sachen beizutragen, einen Hacken hinzuzufügen. nur nicht in die .gemspec Dateien einfügen.

Wenn Sie binding.pry Änderungen an Ihrem Repo drängen, sollten Sie Commit-Hooks hinzufügen, wie Jim darauf hingewiesen hat. Ich denke nicht, dass es sich um ein Problem handelt, das sich auf das Problem bezieht, es hängt davon ab, wie viel Sorgfalt Sie bei der Überprüfung Ihres Diffs brauchen, bevor Sie es ausstoßen.

+0

Pry-Byebug ist auch ein nettes Werkzeug: https://github.com/deidl-rodriguez/pry-byebug –

6

Jon aus der Vergangenheit! Wie Sie wissen, habe ich die Antworten auf (fast) alle Ihre Probleme.

In diesem Fall Sie beschreiben, tatsächlich zwei Probleme auf: (a) Sie nicht require 'pry' kann, wenn Pry nicht in der Gemfile ist, (b) Sie können nicht Pry verwenden, wenn Sie nicht require es tun.

Was Bündler tut, als Conrad Irwin writes:

Bündler ein geiles Juwel ist, dass Sie ein gutes Maß an Vertrauen gibt, dass „wenn es in der Entwicklung funktioniert, ist es in der Produktion arbeitet“. Es kann dies tun, indem es über Edelsteinabhängigkeiten bösartig ist: Wenn es nicht in der Gemfile ist, wird es nicht benötigt. Es stellt auch sicher, dass alle Entwicklungsumgebung identisch ist, nicht mehr "es funktioniert auf meiner Maschine" schneiden es als Entschuldigung.

Es gibt Umstände, unter denen diese dogmatische Verpflichtung zur Pflicht in die Quere kommen kann. Insbesondere alle guten Entwickler haben ihre Entwicklungsumgebung sehr persönlich gestaltet. Natürlich ist es nicht wichtig, dass meine lokalen Tools in der Produktion funktionieren, und es ist positiv für die Produktivität, wenn jeder gezwungen ist, eine identische Entwicklungsumgebung zu haben.

dabei all die guten Dinge Bündler für uns tut Ruby-Entwickler, kommt es durch Design mit einem Vorbehalt: „Was außerhalb des Bündels ist/Gemfile (zB Systemedelsteine) existiert nicht mehr."Wie es das tut ist durch den require Prozess neu definiert und ändert Ihren PATH, so dass er sieht nur das, was in dem Bündel ist.

Das heißt, Sie Pry überhaupt nicht ohne die Gemfile verschmutzen können, sagen Sie, nicht wahr? Nicht Conrad Irwin ist der schlaue kleine Keks, der er ist, kam mit einer Lösung und machte Pry Debundle, ein Juwel, das vorübergehend die Patches Bundler auf unsere benötigt rückgängig gemacht

Also alles, was Sie tun müssen, ist nur require 'pry-debundle' dann Oh ja, Debundle ist wahrscheinlich nicht in der Gemfile

Der Affe Fix ist die Quelle vonzu kopierenzu ~/debundle.rb, und dann load das. (Für den Moment brauchen Sie Pry, um diese Quelldatei zu starten, aber Sie können nur die debundle! Methode verwenden, um dorthin zu gelangen, Pry zu benötigen und herumzuschnüffeln. Ein wenig monkeypatching ist notwendig, aber ich arbeite an einer PR .)

Verwandte Themen