ruby-on-rails - Rails 浏览器 gem 为所有报告的信息返回 'generic'

标签 ruby-on-rails

我正在 Rails 5 中开发一个应用程序。该应用程序在开发和生产环境中都已启动并运行。我正在使用浏览器 gem 来获取平台、浏览器和设备特定的信息。但是,它只返回所有浏览器、平台和设备信息的“通用”。如果我使用请求操作,即 - request.env['HTTP_USER_AGENT']request.remote_ip .我得到了预期的信息(是的,我知道 IP 信息不是通过浏览器返回的。我包含它只是为了“显示”浏览器和连接信息可用)。我已经运行 bundle update 以确保安装了最新版本的浏览器和其他 gem(s)。

我在 Gemfile 中声明了浏览器 gem:

gem 'browser', require: 'browser/browser'

browser README.md避免需要在 Controller 中进行声明。

以下是有关如何使用浏览器的代码片段(也根据 browser README.md )。 connection 是我的应用程序中的一个对象,用于记录获取的浏览器信息。
    browser = Browser.new("Some User Agent", accept_language: "en-us")

    connection.browser_name = browser.name
    connection.browser_full_version = browser.full_version
    connection.browser_device_name = browser.device.name
    connection.browser_platform_name = browser.platform.name
    connection.browser_platform_version = browser.platform.version

我正在使用 nginx 和 puma 进行生产和开发。无论是生产环境还是开发环境,行为都是相同的。此外,在开发中,我是使用 nginx 还是绕过并直接转到 puma 'generic' 是报告的信息。

应用程序使用 HTTP 1.1 和 <!DOCTYPE html>为 View 声明。

以下是获得的输出:
puts request.env['HTTP_USER_AGENT']
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:53.0) Gecko/20100101 Firefox/53.0
puts browser
unknown generic generic0 other
puts browser.name
Generic Browser
puts browser.inspect
#<Browser::Generic:0x007fe24aa41710 @ua="Some User Agent", @accept_language=[#<Browser::AcceptLanguage:0x007fe24aa415d0 @part="en-us", @quality=1.0>], @platform=#<Browser::Platform:0x007fe24aa33d90 @ua="Some User Agent", @subject=#<Browser::Platform::Other:0x007fe24aa33b88 @ua="Some User Agent">>, @device=#<Browser::Device:0x007fe24aa41008 @ua="Some User Agent", @subject=#<Browser::Device::Unknown:0x007fe24aa40d38 @ua="Some User Agent">, @platform=#<Browser::Platform:0x007fe24aa32da0 @ua="Some User Agent", @subject=#<Browser::Platform::Other:0x007fe24aa32b98 @ua="Some User Agent">>>>
puts browser.to_yaml
--- !ruby/object:Browser::Generic
ua: Some User Agent
accept_language:
- !ruby/object:Browser::AcceptLanguage
  part: en-us
  quality: 1.0
platform: !ruby/object:Browser::Platform
  ua: Some User Agent
  subject: !ruby/object:Browser::Platform::Other
    ua: Some User Agent
device: !ruby/object:Browser::Device
  ua: Some User Agent
  subject: !ruby/object:Browser::Device::Unknown
    ua: Some User Agent
platform: !ruby/object:Browser::Platform
  ua: Some User Agent
  subject: !ruby/object:Browser::Platform::Other
    ua: Some User Agent

--- !ruby/object:Browser::Platform
ua: Some User Agent

最佳答案

你好像路过"Some User Agent"作为第一个论点。这是哪里User-Agent浏览器发送的应该通过:

browser = Browser.new(request.headers['User-Agent'], accept_language: request.headers["Accept-Language"])

你还写道:

Per the browser README.md to avoid needing to make a declaration in a controller.


README说(强调我的):

If you want to use Browser on your Rails app but don't want to taint your controller, use the following line on your Gemfile:



“污点”意味着自动向所有 Controller 添加方法,而不是避免声明。如果这是预期的行为,那么请随意保留代码原样。但是,如果您想拥有一个 browser方法可在所有 Controller 操作中使用,而无需进行额外设置,然后放置:
gem 'browser'

Gemfile .它应该自动包含 Browser::ActionController 使用 browser 进入基本 Controller 方法定义如下:
def browser
  @browser ||= Browser.new(
    request.headers["User-Agent"],
    accept_language: request.headers["Accept-Language"]
  )
end

关于ruby-on-rails - Rails 浏览器 gem 为所有报告的信息返回 'generic',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43711613/

相关文章:

ruby-on-rails - asset_sync gem 错误:rake assets:precompile 失败:与服务器证书不匹配(OpenSSL::SSL::SSLError)

ruby-on-rails - 删除了 sqlite gem 但 Heroku 仍然检测到 sqlite gem 并且失败

ruby-on-rails - Rails 中的 byebug 入门

javascript - Rails、jQuery、.js.erb 文件、浏览器不执行的 JS

mysql - 偏移量限制mysql查询

ruby-on-rails - 由随机词组成的 Heroku 应用程序 url

ruby-on-rails - 设置 'EDITOR' 或 'BUNDLER_EDITOR' 环境变量

ruby-on-rails - Ruby: "gem install bundler"未安装 bundler

ruby-on-rails - Rails 3 操作邮件程序制作 OpenSSL::SSL::SSLError: 主机名与服务器证书不匹配

ruby-on-rails - 用于更改现有数据库 View 的 Rails 迁移