我有幾個經由Rake運行的頻繁的Cron作業,並且這些作業的輸出通過電子郵件發送(通過MAILTO)。由於這些任務加載Rails環境(包括Erubis),因此它們在啓動時總是打印出「** Erubis 2.6.5」。這意味着自Cron收到輸出以來始終會生成電子郵件。有什麼辦法可以配置Erubis停止將這個啓動消息打印到控制檯上嗎?當啓動Rails環境時,有什麼辦法可以禁用Erubis打印「** Erubis 2.6.5」嗎?
回答
您需要erubis重新定義rails_helper.rb - 這些都是冒犯行:
## finish
ActionController::Base.new.logger.info "** Erubis #{::Erubis::VERSION}"
$stdout.puts "** Erubis #{::Erubis::VERSION}" if rails22
我建議文件到新的複製內容,刪除記錄的線條和requre是better_rails_helper erubis providef一個代替。 。 `
更新:下面的解決方案來自幾年前,適用於鐵路2是新的和插件仍然普遍。現在,使用寶石是更好的和標準的解決方案,下面的答案不再適用於較新的應用程序;相反,@TALlama發佈的解決方案是可行的。儘管我在這裏留下了這個答案,因爲它是一個可行的解決方案,以防你的應用程序老舊並仍然使用插件。
您可以修改rails_xss插件以刪除此消息。該插件的攻擊部分位於「/plugins/rails_xss/lib/rails_xss/erubis.rb」。在文件的最頂端是一個要求:
require 'erubis/helpers/rails_helper'
修改此要求的要求之前標準輸出簡單地重定向到一個虛擬IO,並恢復到標準輸出,當你做了,是這樣的:
stdout_original, $stdout = $stdout, StringIO.new
require 'erubis/helpers/rails_helper'
$stdout = stdout_original
這很醜陋,但它以相對非侵入性的方式解決了問題。我和OP有類似的問題,需要將「腳本/運行」過程的輸出傳遞給另一個進程,而erubis粗暴地破壞了關於在stdout前端保持沉默的rails組件/插件的約定(正是因爲這個原因) 。上面的解決方案就是我想出來的,對我來說很有用。
使用這裏的答案加上@ michael-andrews鏈接的答案,我對我們的Rails 2.3.14項目進行了以下更改,該項目不需要更改我們的寶石源代碼。打開config/boot.rb
並找到Rails::Boot
類。你增強了load_gems
方法:
class Rails::Boot
def run
load_initializer
Rails::Initializer.class_eval do
def load_gems
buffer = ""
previous_stdout, $stdout = $stdout, StringIO.new(buffer)
@bundler_loaded ||= Bundler.require :default, Rails.env
ensure
$stdout = previous_stdout
output = buffer.gsub(/^\*\* Erubis (\d+\.?)+\s*/, '')
puts output unless output.strip.empty?
end
end
Rails::Initializer.run(:set_load_path)
end
end
這種工作方式是,我們重定向$同時加載寶石標準輸出,流揪成一個本地緩衝區。然後,我們在完成所有事情後檢查緩衝區,刪除Erubis的標註,並顯示可能發生的任何其他事情(不想錯過任何我們沒有預料到的事情!)。
支持這些拉請求,你會得到它沒有任何猴子補丁
https://github.com/rails/rails_xss/pull/14(rails_xss官方插件)
https://github.com/joloudov/rails_xss/pull/1(用於rails_xss寶石)
joloudov合併grosser的拉,但截至今天官方插件還沒有合併它(沒有理由) – 2012-09-27 18:17:43
- 1. 使用Erubis
- 2. 有什麼辦法可以在RStudio中禁用環境窗格?
- 3. 塊純ERB/Erubis
- 4. 有什麼辦法可以打印ValueError的東西嗎?
- 5. 如何使用erubis與mamp
- 6. 有什麼辦法可以禁用任務內的windows.form.timer嗎?
- 7. 有什麼辦法可以禁用UITextField的聽寫支持嗎?
- 8. 有什麼辦法可以禁用FitNesse頁面緩存嗎?
- 9. 有什麼辦法可以禁用Touch ID提示(UIAlertview)嗎?
- 10. Erubis塊助手投擲誤差CONCAT
- 11. 有什麼辦法可以這樣嗎?
- 12. 在Rails 2.2.2中使用Erubis 2.6.2是不兼容的?
- 13. 有什麼辦法可以循環變量名嗎?
- 14. 當我們在R中輸入一個列表變量時,有什麼辦法可以決定打印什麼?
- 15. 有什麼辦法可以禁用日期選取器的Bootstrap?
- 16. 有什麼辦法可以啓動異常的Ruby調試器?
- 17. iOS:有什麼辦法可以僞造用戶的語言環境?
- 18. 有什麼辦法可以禁用var範圍?
- 19. 當使用PHP cURL抓取數據時,有什麼辦法可以禁用圖片下載嗎?
- 20. 有什麼辦法可以禁用Android應用的特定推送通知嗎?
- 21. 有沒有什麼辦法可以禁用jQuery UI-datepicker的動畫只有ie6?
- 22. 有什麼辦法可以自動化施工嗎?
- 23. 有什麼辦法可以自動化Windows窗體測試嗎?
- 24. 有什麼辦法可以自動化Visual Studio 2013嗎?
- 25. 有什麼辦法可以改善TCP連接時間嗎?
- 26. 有沒有什麼辦法可以用Tag Helper創建循環?
- 27. 有什麼辦法可以在Fluent API中禁用Entity代理?
- 28. 有什麼辦法可以禁用ActionBarSherlock中的Tabs .......?
- 29. 有什麼辦法可以從父類調用子方法嗎?
- 30. 有什麼辦法可以禁用wordpress網站的桌面版本嗎?
如果你仍然想看到「Erubis」消息但不希望它傳遞給其他進程,則可以將標準輸出重定向到標準錯誤的副本而不是虛擬字符串。爲此,在上面的代碼片段中用「$ stderr替換」StringIO.new「。dup「 – 2010-08-20 17:19:29