Ruby 如何使用pry访问机架中间件实例?
我不熟悉使用,尽管我可能会尝试,但我找不到正确的命令来访问正在使用Sinatra应用程序运行的rack middleware实例。我在应用程序中有一个错误的部分设置了binding.pry,但问题是一个助手没有返回结果,它从中间件放入env的信息中获取结果。我尝试将cding导入Rack::GeoIPCity,但它不允许我访问任何实例信息 因此,我可以检查本地人、助手和环境-如何从Sinatra应用程序的代码访问中间件 e、 g 因此,在binding.pry被调用的地方,我可以轻松访问geo,env,这是Sinatra向Rack的env提供的一个助手,如果我愿意,我可以轻松地在geo_city_信息中添加绑定。但是,我无法从这些绑定访问Rack::GeoIPCity。我希望有一个命令可以帮助我找到它,因为它必须是加载的应用程序代码的一部分 当然,当我使用Bundler将所有依赖的lib安装到/vendor中时,我可以打开中间件的代码文件并放入pry绑定,但是如果我知道如何在不使用Bundler的情况下执行此操作,那就更好了Ruby 如何使用pry访问机架中间件实例?,ruby,sinatra,rack,pry,Ruby,Sinatra,Rack,Pry,我不熟悉使用,尽管我可能会尝试,但我找不到正确的命令来访问正在使用Sinatra应用程序运行的rack middleware实例。我在应用程序中有一个错误的部分设置了binding.pry,但问题是一个助手没有返回结果,它从中间件放入env的信息中获取结果。我尝试将cding导入Rack::GeoIPCity,但它不允许我访问任何实例信息 因此,我可以检查本地人、助手和环境-如何从Sinatra应用程序的代码访问中间件 e、 g 因此,在binding.pry被调用的地方,我可以轻松访问geo,
非常感谢您提供的任何帮助或见解。不确定您想做什么,但您可以 Monkey修补中间件类以在内部使用pry 直接从源代码连接我理解的您不想要的 使用Sinatra的use方法从中间件堆栈访问所需的中间件 这是我的想法,希望能有所帮助 编辑后:
签出,您可以访问@middleware instance变量以获取已使用的中间件我希望能够从Sinatra应用程序的代码中访问已通过use使用的实例。我不想修补中间件,尽管这是我现在要做的。我会试着澄清我的问题,让它更清楚。
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