你如何在Ruby中打开StringIO?

时间:2014-12-18 21:13:44

标签: ruby io sinatra pry

我有一个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。这可能是问题吗?不知道如何解决这个问题。

0 个答案:

没有答案