1

既存の Rails アプリケーションで作業しているとします。アプリケーションを分解する最良の方法は何ですか?

layouts/application.html.erbから開始すると、1 つ以上の<%yield%>ステートメントが表示されます。ブラウザーに表示されたビューから、yield を構築する基礎となるコードに簡単に戻るにはどうすればよいですか? つまり、すべてのビューでコードを読む必要はありません。


この質問で私が探しているのは実際にはそうではありませんが、Rails に関するヘルプを探している他の人に役立つかもしれません。私はしばらくの間rails-footnotes gem を使用してきました。インスタンス変数、ビュー情報、さらにはタイミングを伴う SQL ステートメントなど、あらゆる種類の有用な情報を含むページにフッターを追加します。

インストールするgem「rails-footnotes」

4

3 に答える 3

2

デバッガーが複雑すぎて、さらに多くのトレース ファイルを探している場合は、おそらく既定のログ出力を使用して取得できます。たとえば、リクエストを行うと、次のような出力がデフォルトで出力されます。

Started GET "/login" for 127.0.0.1 at 2012-11-27 17:52:16 -0600
Processing by SessionsController#create as HTML       
  Rendered sessions/create.html.erb within layouts/application (1.0ms)
  Rendered application/_header.html.erb (1.0ms)
  Rendered application/_wrapper.html.erb (54.0ms)
Completed 200 OK in 150ms (Views: 150.0ms | ActiveRecord: 0.0ms)

ご覧のとおり、出力には、アクセスされたコントローラーとアクション ( SessionsController#create)、および要求に対してレンダリングされたさまざまなパーシャル(Rendered sessions/create.html.erb within layouts/applicationなど) が含まれています。

その単純さとデバッガーの複雑さの間の何かを探しているなら、rack-bugmini-profiler ( railscast ) のようなものを試してみてください。

あなたが探しているのは単に優れた IDE なのかもしれません。Rails の専門家の中には、IDE を使用するという考えを嘲笑する人もいるかもしれませんが、IDE は初心者にも専門家にも同様に多くの利点を提供できると思います。あなたの場合、ビークポイントを簡単に設定し、実行時にコードを視覚的にシングルステップで実行し、途中で変数の内容を検査できることから、おそらく恩恵を受けることができます。私は本当にRubyMineを楽しんでおり、遠慮なくお勧めします (無料ではありませんが、無料の試用版があり、費用に見合うだけの価値があります)。

于 2012-11-27T23:57:32.263 に答える
1

ruby デバッガーを使用できます。

Ruby 1.9.3 を使用していると仮定すると (そうでない場合は回答してください)、次のことを意味します。

  • Gemfile に以下を含めます。gem 'debugger'
  • bundle保存後に実行
  • コントローラー (または使用する場所)debuggerで、コードの実行を停止する場所に行を配置します。

ブラウザからアプリを起動し、サーバーを起動した場所を調べると、デバッグ プロンプトが表示されます。

サーバーをデバッグモードで起動する必要がある場合があります。これは次のように行います。

rails server --debugger

Rails ガイド - Rails アプリケーションのデバッグ

于 2012-11-27T17:29:32.107 に答える
1

raise Exception壊したいコードのどこにでも追加するのはどうですか。これにより、スタック トレースが生成されます。

これはかなり大雑把な解決策です-@BradWerthが示唆するように、私はロガーを使用する傾向があります-実際、多くの場合、Railsログだけで十分です。デバッガーは、本当に深く掘り下げる必要がある特定の状況で役立ちますが、私の経験では、セットアップして使用するのは非常に面倒です:-)

于 2012-11-29T18:21:25.180 に答える