Lou*_*ers 3 logging sinatra rackup puma
我已将Puma添加到我的sinatra应用程序中,现在我在终端中获得两行输出请求.我已经检查过它实际上并没有两次调用代码,我猜测也许Puma正在输出请求信息以及Sinatra.
作为演示,我创建了一个简单的应用程序如下:
的Gemfile
source 'https://rubygems.org'
ruby '2.2.0'
gem 'sinatra'
gem 'puma'
Run Code Online (Sandbox Code Playgroud)
config.ru
require 'sinatra'
get '/' do
'Hello World'
end
run Sinatra::Application
Run Code Online (Sandbox Code Playgroud)
这是我运行的命令:
rackup -s puma
Run Code Online (Sandbox Code Playgroud)
这是我浏览http:// localhost:9292 /时收到的输出类型
R5001755:test louis.sayers$ rackup -s puma
Puma 2.11.3 starting...
* Min threads: 0, max threads: 16
* Environment: development
* Listening on tcp://localhost:9292
::1 - - [03/Jul/2015:21:46:37 +1000] "GET / HTTP/1.1" 200 11 0.0074
::1 - - [03/Jul/2015:21:46:37 +1000] "GET / HTTP/1.1" 200 11 0.0222
Run Code Online (Sandbox Code Playgroud)
关于发生了什么的任何想法?谢谢你的帮助!
这是由CommonLogger中间件引起的.它由Rack(使用时rackup)和Sinatra(启用日志记录时)添加,从而产生重复输出.Sinatra实际上使用此中间件的自定义子类来尝试解决此问题.为了使它工作,它修补原始CommonLogger类.
问题出现是因为Puma还定义了自己的版本,CommonLogger其中不包括Sinatra引入的更改.当在Sinatra之后加载Puma时,Puma版本会覆盖修补版本,因此会发生原始行为(重复的输出行).
有几种方法可以解决此问题.您可以禁用Sinatra中的日志记录以防止添加重复的中间件.该西纳特拉日志记录设置既适用于CommonLogger和Logger中间件(这是什么logger帮手使用),所以你可能要添加Logger自己的中间件:
disable :logging
use Rack::Logger
Run Code Online (Sandbox Code Playgroud)
您还可以通过使用命令选项来阻止rackup添加CommonLogger中间件:-qrackup
$ rackup -q -s puma
Run Code Online (Sandbox Code Playgroud)
另一种选择是确保在Sinatra之前加载Puma,这样当Sinatra补丁时,CommonLogger它正在修补Puma版本,补丁不会在以后被覆盖.您可以使用-r选项rackup强制它加载Puma 来执行此操作:
$ rackup -s puma -r puma
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1024 次 |
| 最近记录: |