Pryを使用するのは初めてですが、Sinatraアプリで実行されているラックミドルウェアインスタンスにアクセスするための適切なコマンドが見つかりません。エラーが発生するアプリの部分を設定binding.pry
しましたが、問題は結果を返さないヘルパーにあり、ミドルウェアによって環境に入力された情報から結果を取得します。にアクセスしよう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
したがって、が呼び出された時点で、(SinatraがRackのenvに提供するヘルパーである)binding.pry
に簡単にアクセスでき、必要に応じて、内部にバインディングを簡単に追加できます。しかし、これらのバインディングからにアクセスすることはできません。ロードされたアプリケーションコードの一部である必要があるため、そこに移動するのに役立つコマンドがあることを期待しています。geo
env
geo_city_info
Rack::GeoIPCity
もちろん、ミドルウェアのコードファイルを開いてpryバインディングを入れることはできますが(Bundlerを使用してすべての依存ライブラリを/ vendorにインストールするため)、これを行う方法を知っていれば、それ。