2015-03-20 6 views
6

Fresh Rails 4.2 einrichten. Ich möchte lange Fehlerrückverfolgungen unterdrücken. Im folgende Backtrace Protokoll würde erste Zeile für mich genug sein, und am nächsten 4Rails Backtrace-Schalldämpfer funktionieren nicht, während Filter

ActionController::RoutingError (No route matches [GET] "/user"): 
    actionpack (4.2.1) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call' 
    web-console (2.1.2) lib/web_console/middleware.rb:37:in `call' 
    actionpack (4.2.1) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call' 
    railties (4.2.1) lib/rails/rack/logger.rb:38:in `call_app' 

Ich habe ein neues Schalldämpfer backtrace_silencers.rb hinzugefügt

# config/initializers/backtrace_silencers.rb 
Rails.backtrace_cleaner.add_silencer { |line| line =~ /lib/ } 

Nach Neustart des Servers entfernt werden kann - nichts passiert, i bekomme immer noch dasselbe Backtrace-Protokoll. (Jede Zeile passende /lib/ sollte entfernt werden: http://api.rubyonrails.org/classes/ActiveSupport/BacktraceCleaner.htm)

Check Sanity:

> line = "actionpack (4.2.1) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'" 
=> "actionpack (4.2.1) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'" 
> line =~ /lib/ 
=> 19 

Aber Filter arbeiten:

# config/initializers/backtrace_silencers.rb 
Rails.backtrace_cleaner.add_filter { |line| line.gsub('lib', 'yeah!') } 

Jetzt sieht Backtrace wie folgt aus:

ActionController::RoutingError (No route matches [GET] "/user"): 
    actionpack (4.2.1) yeah!/action_dispatch/middleware/debug_exceptions.rb:21:in `call' 
    web-console (2.1.2) yeah!/web_console/middleware.rb:37:in `call' 
    actionpack (4.2.1) yeah!/action_dispatch/middleware/show_exceptions.rb:30:in `call' 
    railties (4.2.1) yeah!/rails/rack/logger.rb:38:in `call_app' 

Ich würde mich über einen Ratschlag freuen, wie man Schalldämpfer arbeiten lässt. Prost!

Antwort

4

Problem war mit Minitest-Reporters Juwel (fügt Farben Minitest-Ausgabe), es vermasselt mit Rails Backtrace Filter

beheben Sie hinzufügen müssen folgendes test_helper.rb

Minitest::Reporters.use!(
    Minitest::Reporters::DefaultReporter.new, 
    ENV, 
    Minitest.backtrace_filter 
) 

Problem und Lösung Details hier beschrieben: https://github.com/kern/minitest-reporters#caveats

+0

Ich fügte dies an der Spitze dieser Datei, nach den vorhandenen "erfordern" Zeilen. An sich hat dies keine Änderungen an der "backtrace_silencers.rb" Datei (Reiniger) für mich gemacht.Aber ich fand es in Kombination mit der Antwort von "Michail Chuprynski" notwendig, ein SilentLogger-Modell zu erstellen. Mit diesen beiden Lösungen kann ich endlich all den nutzlosen Müll aus meiner Konsolenausgabe herausholen. – JosephK

0

Entfernen Standard Schalldämpfer vor eigenen hinzufügen:

Rails.backtrace_cleaner.remove_silencers! 
Rails.backtrace_cleaner.add_silencer { |line| line =~ /lib/ } 
+1

Danke, aber es hilft nicht, das selbe Protokoll – Elder

0

Ich hatte ein ähnliches Problem, das durch diesen Code in test_helper verursacht wurde:

def MiniTest.filter_backtrace(backtrace, prefix=nil) 
    backtrace 
end 

Es wurde hinzugefügt, um den Fehler zu einem bestimmten Zeitpunkt und overrides this zu diagnostizieren. Durch das Entfernen wurde der Backtrace entfernt. Diese

3

ist wegen https://github.com/vipulnsward/rails/blob/ecc8f283cfc1b002b5141c527a827e74b770f2f0/actionpack/lib/action_dispatch/middleware/debug_exceptions.rb#L155-L156

Seit application_trace leer ist (Dies ist, weil Fehler nicht aus Benutzercode ist aber Streckenfehler), sind wir zurück zu framework_trace fallen, die es nicht gefiltert (es filtert nur Rauschen) .

Sie können Ihr Gefängnis erreichen, indem Sie Ihren eigenen log_formatter erstellen. In Ihrer development.rb und/oder test.rb

config.log_formatter = SilentLogger.new 
config.log_formatter.add_silencer { |line| line =~ /lib/ } 

hinzufügen und einfache Klasse erstellen in Modellen mit nur Methode call erforderlich. Dort können Sie Ihr Backtrace nach Belieben ändern.

+0

Dies funktionierte, aber nur nachdem auch der Code hinzugefügt wurde, um den Fehler in MiniTest zu beheben, von der ausgewählten Antwort von "Elder". – JosephK

Verwandte Themen