class ApplicationController < ActionController::Base include SeoConcern # Only allow modern browsers supporting webp images, web push, badges, import maps, CSS nesting, and CSS :has. # allow_browser versions: :modern allow_browser versions: :modern, patterns: [ /Mobile Safari/, /Chrome\/[\d.]+/, /Quark\/[\d.]+/, /HuaweiBrowser\/[\d.]+/, /MiuiBrowser\/[\d.]+/, /VivoBrowser\/[\d.]+/, /OppoBrowser\/[\d.]+/, /UCBrowser\/[\d.]+/, /QQBrowser\/[\d.]+/, /MicroMessenger\/[\d.]+/, /Alipay/, /BaiduBoxApp/, /baiduboxapp/i, /SogouMobile/, /Weibo/, /DingTalk/, /ToutiaoMicroApp/, /BytedanceWebview/, /ArkWeb/ ] before_action :set_locale before_action :log_browser_info after_action :track_action def log_browser_info # 构建详细的浏览器信息 browser_info = { user_agent: request.user_agent, path: request.path, browser_name: browser.name, browser_version: browser.version, platform: browser.platform.name, device: browser.device.name, mobile: browser.mobile?, tablet: browser.tablet?, bot: browser.bot?, matched_patterns: matched_browser_patterns, timestamp: Time.current } # 使用 Rails.logger 记录信息(both development and production) Rails.logger.info "Browser Info: #{browser_info.to_json}" # 如果是被拦截的浏览器,记录额外信息 unless browser_allowed? Rails.logger.warn "Browser Blocked: #{browser_info.to_json}" end end protected def track_action ahoy.track "Viewed Application", request.path_parameters end private def set_locale I18n.locale = params[:locale] || I18n.default_locale end end