31

メインの 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}"
4

10 に答える 10

20

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

before do
  puts '[Params]'
  p params
end
于 2009-09-01T21:51:28.987 に答える
15

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

enable :logging, :dump_errors, :raise_errors

ロギング機能の場合:

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

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

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

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

私も使用します

puts "something" + myvar.inspect

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

于 2010-02-24T00:29:39.320 に答える
10

@jshen が言うように、Ruby 1.8 を使用している場合、ruby-debug は非常に優れたツールです。

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

require 'ruby-debug/debugger' 

デバッグを開始したい場所。

于 2010-06-22T22:35:14.357 に答える
8

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

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

于 2011-12-08T11:11:37.903 に答える
3

Ruby 1.8 では ruby​​-debug を使用することを強くお勧めします。4 つまたは 5 つの基本的なコマンドを習得すれば、セットアップと使用は非常に簡単です。パラメータを調べたいブレークポイントを設定し、IRB のようにインタラクティブに操作することができます。

于 2010-02-23T23:45:46.223 に答える
1

Ruby 1.9 のデバッガーgem を使用することをお勧めします。

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

  1. Gemfile に gem を追加する

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

    bundle
    
  3. メインのシナトラ アプリ ファイルに、次を追加します。

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

    debugger
    

    コードのどこにでも。

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

于 2013-11-08T12:08:00.847 に答える
1

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

于 2009-09-02T11:53:19.237 に答える
1

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

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

于 2010-02-23T23:31:13.470 に答える