問題タブ [byebug]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - stdin と stdout をリダイレクトして、webrick によって生成された子 ruby cgi プロセスをデバッグします。
問題: byebug または pry の出力が、コンソールではなく HTTP 経由で返されます。
dispatch.fcgiスクリプトが渡された CGIHandler がマウントされたwebrick.rbスクリプトがあります。
server.mount("/", WEBrick::HTTPServlet::CGIHandler, File.expand_path(File.dirname( FILE ))+"/dispatch.fcgi")
したがって、webrick は各 HTTP リクエストを _do_GET_ メソッドを介してこのスクリプトに渡します。
このメソッドは、次のコード スニペットに従って、IO::popen を使用してサブプロセスを生成します。
/usr/local/rvm/rubies/ruby-2.2.10/lib/ruby/2.2.0/webrick/httpservlet /cgihandler.rb
ソース コード ファイルでbyebugまたはbinding.pryを使用すると、それらのstdoutが親プロセスに返され、最終的にdispatch.fcgiスクリプトによって返され、HTTP 経由で返されます。明らかに、私はそれとやり取りできないので、これは役に立ちません。
これを修正するには、stdout と stdin ではなく別の IO ストリームを使用するか、何らかの方法で /dev/pts の下の別のファイル記述子にリダイレクトするのではなく byebug を使用することを考えています。次に、代わりにこれらのファイル記述子/IO ストリームと対話する小さな console.rb スクリプトを作成し、この方法で byebug または pry と対話することができます。
Ruby、byebug/pry、webrick は初めてで、私の考えは複雑に聞こえます。これを実現する方法がよくわかりません (たとえば、OS で新しいファイル記述子を作成する方法など)。byebug/pry gem をハックして OS をいじるよりも簡単な方法があるに違いありません。CGI をデバッグするためのリソースは非常に限られています。
byebug - 「byebug」の next と step の違い
「byebug」の「ステップ」と「次」の違いは何ですか。いつ一方を他方よりも使用する必要がありますか?
ruby-on-rails - テストモードで byebug を使用した ActiveRecord からの SQL ログがない
Rails 6 の ActiveRecord を使用した Byebug は、テスト環境で期待どおりにログを記録しません。
テストを実行し、byebug を使用して実行を一時停止すると、ActiveRecord はクエリをコンソールに記録しません。たとえば、次のように入力するCandidate.second
と、SQL 出力が表示されません。
Rails コンソール内の開発環境で同じクエリを実行すると、何が表示されますか?
ActiveRecord と ByeBug の両方のドキュメントを調べましたが、これを解決できないようです。どんな助けでも大歓迎です!
再現する手順
デバッガー ステートメントをコントローラーにスローし、テストを実行します。
byebug を使用すると、ActiveRecord がクエリをコンソールに記録しません。たとえば、コントローラー アクションにヒットするテストを実行する場合:
ターミナルから:
rails test test/controllers/jobs_controller.rb