Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何使用pry访问机架中间件实例?_Ruby_Sinatra_Rack_Pry - Fatal编程技术网

Ruby 如何使用pry访问机架中间件实例?

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,

我不熟悉使用,尽管我可能会尝试,但我找不到正确的命令来访问正在使用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的情况下执行此操作,那就更好了


非常感谢您提供的任何帮助或见解。

不确定您想做什么,但您可以

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