我是使用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 中),但如果我知道如何做到这一点而不求助于那。