gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:03:27 26 4
gpt4 key购买 nike

我正在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com