问题:byebug或pry输出通过HTTP而不是在控制台上返回。
我有一个 webrick.rb 脚本,该脚本具有一个CGIHandler,并通过该脚本传递了 dispatch.fcgi 脚本:
server.mount(“ /”,WEBrick :: HTTPServlet :: CGIHandler,File.expand_path(File.dirname( FILE ))+“ / dispatch.fcgi”)
因此,webrick通过_do_GET_方法将每个HTTP请求传递给此脚本。
根据
的此代码段,此方法使用IO :: popen生成子进程/usr/local/rvm/rubies/ruby-2.2.10/lib/ruby/2.2.0/webrick/httpservlet /cgihandler.rb
class CGIHandler < AbstractServlet
Ruby = RbConfig.ruby # :nodoc:
CGIRunner = "\"#{Ruby}\" \"#{WEBrick::Config::LIBDIR}/httpservlet/cgi_runner.rb\"" # :nodoc:
##
# Creates a new CGI script servlet for the script at +name+
def initialize(server, name)
super(server, name)
@script_filename = name
@tempdir = server[:TempDir]
@cgicmd = "#{CGIRunner} #{server[:CGIInterpreter]}"
end
# :stopdoc:
def do_GET(req, res)
cgi_in = IO::popen(@cgicmd, "wb")
当我在源代码文件中使用 byebug 或 binding.pry 时,它们的 stdout 返回到父进程,然后该父进程返回最终由 dispatch.fcgi 脚本提供,并因此通过HTTP返回。显然这是没有用的,因为我无法与之交互。
要解决此问题,我的想法是让byebug而不是使用不同的IO流,而不是stdout和stdin,或者以某种方式将其重定向到/ dev / pts下的其他文件描述符。然后,我可以编写一个小的console.rb脚本来代替与那些文件描述符/ IO流进行交互,这样我就可以与byebug或pry进行交互。
我是红宝石,byebug / pry和webrick的新手,我的想法听起来很复杂。我真的不知道如何实现这一目标(例如,如何在OS中创建新的文件描述符),而且我敢肯定肯定有比黑客破解byebug / pry gem和OS混乱的方法更简单的方法吗? 用于调试CGI的资源非常有限。