我有一个Sinatra应用程序,其中包含以下main.rb
:
require 'bundler'
Bundler.require
get '/' do
@@p = Pry.new
haml :index
end
post '/' do
code = params[:code]
$stdout = StringIO.new
@@p.eval(code)
output = $stdout.string
$stdout = STDOUT
output_arr = []
output.each_line('\n') { |line| output_arr << line }
output_arr[1]
binding.pry
end
当我点击底部的binding.pry
以查看output
是否包含任何输出时,似乎IO流未关闭,因为我无法在控制台中显示任何内容。
但是,如果我尝试在open
上致电StringIO.new
,我会收到NoMethodError - private method 'open' called
。
我在config.ru
文件中要求'stringio',我也尝试在main.rb
文件中要求它:
config.ru
:
require 'stringio'
require './main'
run Sinatra::Application
我不确定这是否相关,但我注意到有趣的是,在irb
中,如果我require 'pry'
在要求stringio
之前,则返回{{ 1}},否则返回false
。
这让我想知道Sinatra在加载true
之前是否在我的Gemfile中包含Pry
。这可能是问题吗?不知道如何解决这个问题。