2011-11-09 7 views
1

Ruby/Railsでのデバッグにアプローチ/方法論を共有できますか?Ruby/Railsデバッグ戦略

私はRailsのチュートリアルで忙しいんだ、とエラーを取得しています:

NoMethodError in UsersController#show 
undefined method `microposts' for #<User:0x83b43e8> 

そして、それは私が戦略をデバッグすることを考えました。誰かが、新しいRailsユーザー(および新しいMVCユーザー)に、デバッグにアプローチする方法に関するアドバイスを持っていますか?あなたはどんな道を歩いていますか?一般に認められているアプローチはありますか?コードをステップ実行する方法はありますか?

今私は一種の「糸くず」チェッカーとして単体テストを使用していますが、それはこれまでのところしかありません。

私はそれを解決したいと思っていますが、私が今得ている実際のエラーは、この質問の主な推進力ではありません。

(PS:他の場所に記載されているような問題がRuby on Rails Guideを開始するには絶好の場所になりますが、plenty moreがありますStackOverflowの

+0

正当な問題ですが、よくある質問です。 [ruby]と[debugging]または[ruby-on-rails]と[debugging]というタグが付いた他の質問を閲覧し、投票順に並べ替えることもできます。私が書いたものはhttp://stackoverflow.com/questions/3955688/how-do-i-debug-ruby-scriptsですが、RailsのものよりRuby専用のアプリの方が多くあります。 –

答えて

4

を持つルビーマインを使用し、私は、これはまだ言及見ていないが、別のオプションは、あなたのコード内でdebugger文を置くことです。この

def some_method 
    something = 3 
    debugger 
    # ... more code 
end 

コードがdebuggerに達したときに、これは、レールのアプリであれば、それはIRBのセッションのように見える何かにジャンプするWebサーバーを実行しているターミナルウィンドウが発生しますと同じように(私は何も正確にはわかりません)です。そこから、puts somethingを実行して、値がどのようなものであるかを確認できます。 puts paramsでも、すべてのparamsの値を確認することができます。コードをステップ実行したり、特定の行にジャンプしたりすることもできます。

Pryはこの問題を解決するためのより良い方法だと思われますが、私が詮索することを知る前に私がどのようにデバッグしていたかがわかります。

注:レール外でこれを行う場合は、require 'ruby-debug'する必要があります。

0

に複製「ショー」ではありません

3

私はIRBの組み合わせを使用しています。 、printステートメント、ロギング、バインドを詮索することができます。(0120)同様のこと)、コンソールで速いフィードバックループを壊すかどうかを確認してください。あなたのクラス/モジュールで何かを変更する場合はreload!をしなければなりません。

あなたがテストを実行していて、あなたのテストで何か別のものを出力したいのであれば、printステートメントは簡単です。しかし、ブラウザでテストした場合、私はロガーに書くことをお勧めします:Rails.logger.debug "..."。しかし、あなたの設定のロギングレベルをDEBUGに設定することを忘れないでください。 - あるいは、Rails.logger.infoをデフォルトで表示するだけです。次に、my_app/logs/development.rbのログをテールしたり表示したりできます。

本当に面倒なバグの私の好きな方法は、テストでエラーが起きた場合は、先ほどの行にbinding.pryを置き、その行でテストを一時停止してコンソールにドロップするということです。私はいつもの事は、私は彼らが何を考えてやるかどうかを確認するために一緒にプレイするirbセッションをrails consoleセッションを持っているか、最低でもhttp://railscasts.com/episodes/280-pry-with-rails

+0

あなたが知らなかった場合には、PryをIRBの代わりに使うことができます。コマンドプロンプトで 'irb'の代わりに' pry'と打ってください。 – horseyguy

0

:私は、より詳細な情報のためのキャストレールを見てお勧めします。

私はまた、優れた統合デバッガhttp://www.jetbrains.com/ruby/

3

私は 'pry' gemなしでRailsプロジェクトを開始しません。ちょうどあなたのビューの、テンプレートでモデル、コントローラ、テスト...へ binding.pry 、または <% binding.pry %> を入れ、

group :development, :test do 
    gem 'pry' 
end 

をして、プロジェクト内の任意の場所にリクエストの実行を停止します。

Genfileに宝石を追加、部分的。

次に、オブジェクト、パラメータ、変数が何であるかを確認することができます。 exitを入力してください。要求が続行されます。