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