【发布时间】:2012-10-28 19:01:09
【问题描述】:
我是使用Pry 的新手,尽我所能尝试,我找不到正确的命令来访问使用 Sinatra 应用程序运行的机架中间件实例。我在应用程序中出现错误的部分设置了binding.pry,但问题在于没有返回任何结果的助手,它从中间件放入 env 的信息中获取结果。我尝试将cding 到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 环境提供的帮助程序),并且我可以轻松地在geo_city_info 中添加绑定,如果我想了。但是,我无法从这些绑定中访问 Rack::GeoIPCity。我希望有一个命令可以帮助我导航到那个位置,因为它必须是加载的应用程序代码的一部分。
当然,我可以打开中间件的代码文件并放入 pry 绑定(因为我使用 Bundler 将所有依赖库安装到 /vendor 中),但如果我知道该怎么做会更好不诉诸于此。
【问题讨论】: