web-dev-qa-db-ja.com

RailsアプリのようなSinatraアプリをどのようにデバッグしますか?

メインのSinatraコントローラーで、フォームからPOSTされた後のparamsハッシュをデバッグしたいと思います。

私が追加しました:

puts params.inspect

そして

set :logging, :true

params.inspectすべてがうまくいけば動作します。しかし、コントローラーが実行される前にエラーが発生した場合、デフォルトでRailsにあるように、エラーに関する情報を取得できません。

有用なデバッグ情報を取得する最良の方法は何ですか?

この例 はまったく機能しませんでした(このコードを追加した後も、アプリは起動しませんでした)。

configure do 
  Log = Logger.new("sinatra.log")
  Log.level  = Logger::INFO 
end

に続く:

Log.info "#{@users.inspect}"
30
nova

パラメータを出力するbeforeフィルタを追加してみてください

before do
  puts '[Params]'
  p params
end
20
BaroqueBobcat

このシナリオでは一部のデバッグフラグがオンになっているため、デバッグにはconfigure :development doを使用する必要があると私は考えています。したがって、configure doブロックの下でフラグを有効にできます。

enable :logging, :dump_errors, :raise_errors

そしてあなたの伐採施設のために:

log = File.new("sinatra.log", "a")
STDOUT.reopen(log)
STDERR.reopen(log)

シナトラハンドブックから:

  • dump_errorsオプションは、ルートから例外が発生したときにバックトレースをrack.errorsにダンプするかどうかを制御します。このオプションは、トップレベルのアプリではデフォルトで有効になっています。

  • raise_errors-例外がアプリの外部に伝播することを許可します(...):raise_errorsオプションは、クラシックスタイルアプリではデフォルトで無効になり、Sinatra :: Baseサブクラスではデフォルトで有効になります。

私も使用します

puts "something" + myvar.inspect

私のコントローラーの真ん中にメソッド。

14
include

@jshenが言うように、Ruby-debugは非常に素晴らしいツールです-Ruby 1.8。

シナトラで使用するには、挿入します

require 'Ruby-debug/debugger' 

デバッグを開始する場所。

10
asymmetric

PryまたはRubyデバッガーを使用することをお勧めします。Pryを使用すると、コマンドラインを使用して、bashで行うようにメソッドと変数をトラバースできます。

PryをSinatraで使用する方法 」を参照してください。

8
Ryan

シナトラアプリをデバッグする最良の方法を見つけるために、githubにリポジトリを作成しました。最も有用な部分は、以下のようなメソッドのデバッグへのステップです。

enter image description here

これがリポジトリです: https://github.com/hlee/sinatra_debugger_example

4
Race

Ruby 1.8の場合は、Ruby-debugを使用することを強くお勧めします。4つまたは5つの基本的なコマンドを習得すれば、セットアップと使用が非常に簡単になります。必要な場所にブレークポイントを設定できます。 IRBの場合と同様に、パラメーターを調べてインタラクティブに再生します。

3
jshen

Ruby 1.9には debugger gemを使用することをお勧めします。

これをSinatraアプリで使用するには:

  1. Gemfileにgemを追加します

    gem "debugger"
    
  2. 実行して宝石をインストールする

    bundle
    
  3. メインのsinatraアプリファイルに、

    require 'debugger'
    
  4. デバッグするには、次の行を追加するだけです

    debugger
    

    コードのどこにでも。

コードが実行されているときにdebuggerが表示されると、コードが停止し、変数の検査やコマンドの実行(evalを使用)などができます。

1
Zack Xu

あなたがメインのSinatraコントローラーについて言及したので、私は推測していると思います。つまり、クラシック(トップレベル)Sinatraアプリを使用するのではなく、Sinatra :: Baseをサブクラス化しているということです。これが事実である場合、Sinatraが行うデフォルトのエラー処理の多くはデフォルトで無効になっています。

クラス定義にset :show_exceptions, true if development?を含めると、内部サーバーエラーだけでなく、スタックトレースやパラメータなどを含むわかりやすいエラーページが表示されます。もう1つのオプションは、set :raise_errors, falseを使用し、ルートの1つがエラーを発生させるたびに実行されるerror do ... endブロックを含めることです。

1
Emily

この記事のようなものを試すことを考えましたか: http://www.gittr.com/index.php/archive/logging-with-sinatra-and-passenger-another-try/

1
Zach Inglis

SinatraのRubyデバッガー

SinatraのRubyデバッガーは自由に使用できます。主な問題は、どのRuby GemがどのRubyバージョンに使用されているかを知る必要があることです。ほとんどの人にとって、これはRuby 2.Xおよび byebug を意味します。

RubyバージョンごとのRubyデバッガ

 Ruby Version   Gem Install      require                add breakpoint
 ---------------------------------------------------------------------
 1.8.X          Ruby-debug      'Ruby-debug/debugger'   debugger
 1.9.X          debugger        'debugger'              debugger
 2.0.0+         byebug          'byebug'                byebug

Gemをインストールする必要があることがわかったら、コードでそれを要求し、キーワードを入力してブレークポイントを追加します。例としてbyebugを取ります:

  1. インストール:gem install byebug
  2. 必要:require 'byebug'
  3. ブレークポイント:byebug

参考文献

Byebugプロジェクト

ターミナルデバッガを使用するためのByebugガイド

0
not a patch