1

我是使用Pry的新手,尽我所能,我找不到正确的命令来访问使用 Sinatra 应用程序运行的机架中间件实例。我已经binding.pry在应用程序的一部分中设置了错误,但问题在于没有返回任何结果的助手,它从中间件放入 env 的信息中获取结果。我尝试cd进入Rack::GeoIPCity,但它没有让我访问任何实例信息。

所以,我可以检查本地人、助手和环境——我如何 从 Sinatra 应用程序的代码中获取中间件?

例如

class App < Sinatra::Base
  # inside the Sinatra app
  use Rack::GeoIPCity, :db => File.expand_path( File.join(File.dirname(__FILE__), "assets/GeoLiteCity.dat"))

  def geo_city_info
    h = {}
    env.select{|x| x =~ /^GEOIP/ }.each {|k,v|
      h[k.split("GEOIP_").last.downcase] = v
    }
    OpenStruct.new( h )
  end

  get "/home" do
    geo = geo_city_info
    binding.pry
  end

end

所以在binding.pry被调用的地方我可以很容易地访问geo, env(这是 Sinatra 为 Rack 的 env 提供的一个助手),geo_city_info如果我愿意的话,我可以很容易地在里面添加一个绑定。但是,我无法Rack::GeoIPCity从这些绑定中访问。我希望有一个命令可以帮助我导航到那个,因为它必须是加载的应用程序代码的一部分。

当然,我可以打开中间件的代码文件并放入 pry 绑定(因为我使用 Bundler 将所有依赖库安装到 /vendor 中),但如果我知道如何做到这一点而不求助于那。

4

1 回答 1

2

不知道你想做什么,但你可以

  • Monkey 修补中间件类以在里面使用 pry

  • 直接从源代码连接(我理解你不想要的)

  • 使用 Sinatra 的“使用”方法从中间件堆栈访问您想要的中间件

这是我的想法,希望对你有帮助

编辑后:

看看这个,你可以访问@middleware 实例变量来获取使用的中间件

于 2012-11-08T16:33:33.853 回答