Ahoy Gem の「リクエスト」はしばしば nil です
概要
Ahoy gem による追跡から IP アドレスの範囲を除外しようとしています。ドキュメントには次の例が示されています。
Ahoy.exclude_method = lambda do |controller, request|
request.ip == "192.168.1.1"
end
ahoy.rb 初期化ファイルには次のものがあります。
Ahoy.exclude_method = lambda do |controller, request|
range = IPAddr.new("66.249.66.0/24")
range.include?(request.ip) || request.url.split("/").include?("serviceworker.js")
end
Rollbar は、ahoy.rb ファイルからの継続的なエラーを報告しています。
NoMethodError: [safely] undefined method `ip' for nil:NilClass
おそらくリクエストとは何なのか理解していませんが、誰かが私のサイトに来ているのであれば、有効な非 nil リクエストがあるはずだと推測します。そうですか?
答えは明らかに「いいえ」です。明らかにリクエストは nil であることが多いため、それは正しくありません。エラーはサイトのユーザー エクスペリエンスに影響を与えないため、次のステップはロールバー レポートからこのエラーを除外して次に進むことだと考えています。私はこれについてまっすぐに考えていますか?
解決策
Ahoy.exclude_method = lambda do |controller, request|
if request.present? && request&.ip.present?
range = IPAddr.new("66.249.66.0/24")
range.include?(IPAddr.new(request.ip)) || request.url.split("/").include?("serviceworker.js")
else
false
end
end
アクセスする前に、リクエスト オブジェクトとリクエスト IP アドレスが存在することを確認してください。また、範囲に含まれるかどうかを確認する前に、リクエスト IP アドレスを IPAddr インスタンスに変換します。