我刚开始使用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
时我可以轻松访问geo
,env
(这是Sinatra为Rack的env提供的帮助),我可以轻松添加绑定如果我想的话,在geo_city_info
内。但是,我无法从这些绑定访问Rack :: GeoIPCity。我希望有一个命令可以帮助我导航到它,因为它必须是加载的应用程序代码的一部分。
当然,我可以打开中间件的代码文件并放入pry绑定(因为我使用Bundler将所有依赖库安装到/ vendor中),但如果我知道如何执行此操作会更好没有诉诸于此。
非常感谢任何帮助或见解。
答案 0 :(得分:2)
不确定你要做什么,但你可以
Monkey修补中间件类以使用pry
直接从源代码连接(我理解你不想要的)
使用Sinatra的“use”方法从中间件堆栈访问您想要的中间件
这是我的想法,希望有所帮助
您的编辑后:
查看this,您可以访问@middleware实例变量来获取使用过的中间件