2011-10-05 39 views

回答

0

简单修正:gem'rack','1.3.3'(使用以前版本的机架并且错误消失)。比简单的静音好得多。

+1

这是一个糟糕的主意,正如在[关于此警告的此博客帖子]中的一条评论中所解释的(http://gunnertech.com/2011/10/warning-already-initialized-恒定wfkv_ /)。你最好的选择就是忽略这个警告。长话短说:机架1.3.3有1.3.4解决的拒绝服务攻击漏洞。 – nzifnab

2

这是一个警告,而不是一个错误。您可以放心地忽略它,并且没有任何事情可以做,以防止它在未编辑rack源代码的情况下出现。如果警告错误,你总是可以暂时沉默的Ruby与Rails的这个方法:

def silence_stream(stream) 
    old_stream = stream.dup 
    stream.reopen(RbConfig::CONFIG['host_os'] =~ /mswin|mingw/ ? 'NUL:' : '/dev/null') 
    stream.sync = true 
    yield 
ensure 
    stream.reopen(old_stream) 
end 

silence_stream(STDERR) do 
    silence_stream(STDOUT) do 
    require 'sinatra' 
    end 
end 

# rest of code as usual... 

或块只是警告,而不是整个标准错误和标准输出流:

verbose = $VERBOSE 
$VERBOSE = nil 
require 'sinatra' 
$VERBOSE = verbose 

# rest of code as usual... 

如果ISN”不工作,那么你可能会阻止代码的错误部分。由于机架引起了警告,因此我认为这是在第一次需要机架时发生的。这可能是通过Sinatra为你完成的,这就是为什么我要求在需要Sinatra的时候阻止警告。您可以尝试将require的其余部分放在紧接require 'sinatra'旁边的行中。

+0

我在哪里可以放置这段代码?在我的Sinatra application.rb中? – Rezen

+0

无论你现在有什么'包括'sinatra''(删除该行并替换上述代码),所以是的,我会假设application.rb。这个警告虽然不会引起任何问题,所以你可以保持原样,但取决于你。 – arcresu

+0

对不起,我不知道我在想什么 - 我的意思是'不要'包含'。编辑来解决这个问题。 – arcresu

6

这将在Rack 1.3.5和1.4.0中修复。

+0

This is fixed in Rack 1.3.5 – s01ipsist