メインの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}"
パラメータを出力するbeforeフィルタを追加してみてください
before do
puts '[Params]'
p params
end
このシナリオでは一部のデバッグフラグがオンになっているため、デバッグには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
私のコントローラーの真ん中にメソッド。
@jshenが言うように、Ruby-debugは非常に素晴らしいツールです-Ruby 1.8。
シナトラで使用するには、挿入します
require 'Ruby-debug/debugger'
デバッグを開始する場所。
PryまたはRubyデバッガーを使用することをお勧めします。Pryを使用すると、コマンドラインを使用して、bashで行うようにメソッドと変数をトラバースできます。
「 PryをSinatraで使用する方法 」を参照してください。
シナトラアプリをデバッグする最良の方法を見つけるために、githubにリポジトリを作成しました。最も有用な部分は、以下のようなメソッドのデバッグへのステップです。
これがリポジトリです: https://github.com/hlee/sinatra_debugger_example
Ruby 1.8の場合は、Ruby-debugを使用することを強くお勧めします。4つまたは5つの基本的なコマンドを習得すれば、セットアップと使用が非常に簡単になります。必要な場所にブレークポイントを設定できます。 IRBの場合と同様に、パラメーターを調べてインタラクティブに再生します。
Ruby 1.9には debugger gemを使用することをお勧めします。
これをSinatraアプリで使用するには:
Gemfileにgemを追加します
gem "debugger"
実行して宝石をインストールする
bundle
メインのsinatraアプリファイルに、
require 'debugger'
デバッグするには、次の行を追加するだけです
debugger
コードのどこにでも。
コードが実行されているときにdebugger
が表示されると、コードが停止し、変数の検査やコマンドの実行(eval
を使用)などができます。
あなたがメインのSinatraコントローラーについて言及したので、私は推測していると思います。つまり、クラシック(トップレベル)Sinatraアプリを使用するのではなく、Sinatra :: Baseをサブクラス化しているということです。これが事実である場合、Sinatraが行うデフォルトのエラー処理の多くはデフォルトで無効になっています。
クラス定義にset :show_exceptions, true if development?
を含めると、内部サーバーエラーだけでなく、スタックトレースやパラメータなどを含むわかりやすいエラーページが表示されます。もう1つのオプションは、set :raise_errors, false
を使用し、ルートの1つがエラーを発生させるたびに実行されるerror do ... end
ブロックを含めることです。
この記事のようなものを試すことを考えましたか: http://www.gittr.com/index.php/archive/logging-with-sinatra-and-passenger-another-try/
SinatraのRubyデバッガーは自由に使用できます。主な問題は、どのRuby GemがどのRubyバージョンに使用されているかを知る必要があることです。ほとんどの人にとって、これはRuby 2.Xおよび byebug を意味します。
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を取ります:
gem install byebug
require 'byebug'
byebug