2013-08-07 2 views
11

Railsアプリケーションで使用されている宝石をデバッグしようとしています。Gemfileを変更せずに、または `require`を使用して宝石を盛り上げよう

私はしかし、私は多くの場合にどこかにGemfileにPRYを追加することで立ち往生しています

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

周りのぞきに行くために、ローカルに宝石をクローン化した(ともなど、などgit bisectなど素敵なことを行うために私を可能にします)それを使用できるようにするか、コードにrequire "pry"を呼び出すことができます。たとえば、私は時々それを忘れてバグを修正し、GemfileでPryを使ってプロジェクトにコミットします。

私はそれをしないでください、LoadErrorが発生します、cannot load such file -- pry (LoadError)

私は別のコンテキスト(Railsプロジェクト、Gem、ローカルRuby)と実際のGemfile(Gemfile、require、installed)の間で少し失われています。

Gemfilesを介さずに、Rails内のGemでbinding.pryを使用するにはどうすればよいですか?

+3

私も同じ問題があります。私が考えた(しかし、実装していない)技術の1つは、コミット中に自分のコードの中に 'pry'の出現をチェックするためにgitフックを使用していました。次に、RailsのGemfileで開発グループに追加します。 gemfile(gemspecではなく)に追加してください。 –

+0

'pry'をどこかに置いておくと、ユニットテストも失敗するはずです。 –

答えて

1

あなたのレールアプリで宝石を使い、デバッグしたいなら、それはあなたのアプリのGemfileの開発とテストグループになければなりません。

pry-debugger https://github.com/nixme/pry-debuggerのようなツールを使用して、プリーセッションbreak SomeClass#runにブレークポイントを設定することができます。

私はバグを修正したり、貢献したりするために私がフォークするすべてのプロジェクトにpryを追加するのが有効だと思います。ファイルを.gemspecに入れないでください。

リポジトリへの変更をbinding.pryにする場合は、Jimのようにコミットフックを追加する必要があります。私はこれがpry関連の問題ではないと思っています。それを押し出す前にあなたのdiffを見直すときにどれだけ気を配っているかに依存しています。

+0

pry-byebugも素晴らしいツールです:https://github.com/deivid-rodriguez/pry-byebug –

6

過去のJon!ご存知のように、私は(ほぼ)すべての問題に対する答えを持っています。 PRYはGemfileでないときにあなたがそれをしませrequireを行う場合の(a)あなたは、(b)は、あなたが詮索を使用することはできませんないrequire 'pry'ことができます。この場合

は、あなたが実際には二つの問題を記述しています。コンラッドアーウィン writesとして、何バンドラー

バンドラーはあなたに「それは開発に動作するかどうか、それが生産に働く」という自信の良い度を与える素晴らしい逸品です。これは、宝石の依存関係を悪条件にすることで可能です:もしそれがGemfileになければ、それは必要とされません。また、誰もの開発環境が同一であることを保証し、「マシン上で動作します」という言葉を言い訳にしません。

この独断的な献身が途方もないときには状況があります。特に、良い開発者はすべて自分の開発環境を非常に個人的にセットアップしています。明らかに、私のローカルツールが本番環境で動作することは重要ではありません。誰もが確実に正しい開発環境を構築することができれば、生産性が確実に悪くなります。

だから、バンドラーは、私たちのRuby開発者のためにするすべての良いものを行う際に、それは警告と設計によって来る:「バンドルの外にあるもの/ Gemfile(例えば、システムの宝石)はもう存在しません。それはどのようにrequireプロセスを再定義することであり、PATHはバンドルの内容だけを見るように変更されます。

つまり、Gemfileを汚染することなくPryを使用することはできません。非常に高速。コンラッドアーウィンは彼がスマート少しクッキーされて、解決策を考え出したとPry Debundle、一時的にバンドラーは、私たちの必要に作られたパッチを逆に宝石を作った。

だから、あなたがしなければならないすべては、ちょうどrequire 'pry-debundle'です、ああ...待っててよ、DebundleはおそらくGemfileにはありません。

猿の修正は、のソースをハードコピーすることです。〜~/debundle.rb、次にloadです。 (今は、そのソースファイルを実行するためにPryがロードされている必要がありますが、debundle!メソッドしか実行できず、Pryを必要とし、苦労します。少しのMonkeypatchingが必要ですが、私はPR 。)

関連する問題