0
我有一個使用ERB類來解析一些嵌入式Ruby的Ruby腳本。如果被解析的代碼重新定義了一個常量,那麼ERB會向STDERR發出一個警告,但是我的腳本完全不知道發生了這種情況。如何捕獲/控制關於已初始化常量的ERB警告?
- 如何發現警告是否已發出?
- 我可以強制它是一個錯誤嗎?
我可以在進入STDERR並操作/重定向它之前獲取警告文本嗎?
#!/usr/bin/env ruby require "erb" begin erb = ERB.new("<% FOO = 1 %>\n<%FOO = 2 %>", 0, "-") result = erb.result rescue fail # Doesn't cause exception end STDOUT.puts "OKAY"
輸出是:
(erb):2: warning: already initialized constant FOO
(erb):1: warning: previous definition of FOO was here
OKAY
重定向很簡單。只要執行'$ stderr = StringIO.new'(或其他) –
看起來像erb認爲這是一個警告,因此不會引發錯誤。即使捕獲stdout和stderr,如果您設置日誌記錄級別以避免生成警告,您也可能無法在生產環境中獲取任何內容。 –