如何使用pry访问Rack中间件实例?

时间:2012-11-08 14:57:16

标签: ruby sinatra rack pry

我刚开始使用Pry,并尽可能地尝试,我无法找到正确的命令来访问使用Sinatra应用程序运行的机架中间件实例。我在应用程序的部分设置了binding.pry我遇到了错误,但问题是帮助者没有返回任何结果,它从中间件的env中获取信息的结果。我尝试将cd进入Rack :: GeoIPCity,但它没有让我访问任何实例信息。

所以,我可以查看当地人,帮助者和环境 - 如何从Sinatra应用程序的代码中获取中间件

e.g。

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时我可以轻松访问geoenv(这是Sinatra为Rack的env提供的帮助),我可以轻松添加绑定如果我想的话,在geo_city_info内。但是,我无法从这些绑定访问Rack :: GeoIPCity。我希望有一个命令可以帮助我导航到它,因为它必须是加载的应用程序代码的一部分。

当然,我可以打开中间件的代码文件并放入pry绑定(因为我使用Bundler将所有依赖库安装到/ vendor中),但如果我知道如何执行此操作会更好没有诉诸于此。

非常感谢任何帮助或见解。

1 个答案:

答案 0 :(得分:2)

不确定你要做什么,但你可以

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

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

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

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

您的编辑后:

查看this,您可以访问@middleware实例变量来获取使用过的中间件