2011-10-05 38 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