Techioz Blog

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 インスタンスに変換します。