首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails浏览器gem正在重新测试所有报告的信息的“泛型”

Rails浏览器gem正在重新测试所有报告的信息的“泛型”
EN

Stack Overflow用户
提问于 2017-04-30 21:40:24
回答 1查看 916关注 0票数 5

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

我在Gemfile中声明了browser gem:

代码语言:javascript
复制
gem 'browser', require: 'browser/browser'

根据浏览器README.md来避免在控制器中进行声明。

下面是如何使用浏览器的代码片段(也适用于浏览器README.md)。connection是我的应用程序中用于记录所获得的浏览器信息的对象。

代码语言:javascript
复制
    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和美洲狮进行生产和开发。无论是生产环境还是开发环境,行为都是相同的。此外,在开发过程中,无论我是使用nginx还是绕行,直接转到puma 'generic‘都是报告的信息。

应用程序使用HTTP1.1,并为视图声明了<!DOCTYPE html>

以下是从以下方面获得的输出:

puts request.env['HTTP_USER_AGENT']

代码语言:javascript
复制
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:53.0) Gecko/20100101 Firefox/53.0

puts browser

代码语言:javascript
复制
unknown generic generic0 other

puts browser.name

代码语言:javascript
复制
Generic Browser

puts browser.inspect

代码语言:javascript
复制
#<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

代码语言:javascript
复制
--- !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
EN

回答 1

Stack Overflow用户

发布于 2017-05-02 02:57:19

似乎您正在传递"Some User Agent"作为第一个参数。浏览器发送的User-Agent应该在这里传递:

代码语言:javascript
复制
browser = Browser.new(request.headers['User-Agent'], accept_language: request.headers["Accept-Language"])

你还写道:

根据浏览器README.md,以避免在控制器中声明。

README说(强调我的):

如果您想在Rails应用程序上使用浏览器,但不希望污染您的控制器,请在Gemfile上使用以下行:

“污染”意味着自动向所有控制器添加方法,而不是避免声明。如果这是预期的行为,那么可以随意保留代码的原样。但是,如果您希望在所有控制器操作中都可以使用browser方法,而不需要进行额外的设置,那么请放置:

代码语言:javascript
复制
gem 'browser'

Gemfile中。它应该自动地将Browser::ActionController包含到基控制器中,并使用定义如下的browser方法:

代码语言:javascript
复制
def browser
  @browser ||= Browser.new(
    request.headers["User-Agent"],
    accept_language: request.headers["Accept-Language"]
  )
end
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43711613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档