2016-07-08 23 views
3

(Neuling alert)Wie kann ich Yesod-Fehlermeldungen effektiv lesen?

Da die folgende Fehlermeldung, was ist der schnellste Weg zur Quelle des Fehlers zu erhalten:

08/Jul/2016:11:39:01 +0530 [Error#yesod-core] expected EPlain but got Nothing for: DerefBranch (DerefIdent (Ident "show")) (DerefString "abcdef") @(yesod_3MCr4WfhviiELXmo3fAaXL:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:625:5) 
GET/
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
    Status: 500 Internal Server Error 0.054158s 

Handler/Home.hs:38:11: 
    No instance for (Text.Julius.ToJavascript String) 
     arising from a use of ‘Text.Julius.toJavascript’ 
    In the second argument of ‘(GHC.Base..)’, namely 
     ‘Text.Julius.toJavascript’ 
    In the second argument of ‘(GHC.Base..)’, namely 
     ‘(Text.Julius.unJavascript GHC.Base.. Text.Julius.toJavascript)’ 
    In the expression: 
     Text.Shakespeare.EPlain 
     GHC.Base.. 
     (Text.Julius.unJavascript GHC.Base.. Text.Julius.toJavascript) 
Build failure, pausing... 

Ich bin mit einer einfachen rüsteten Baustelle arbeiten (kein DB) und absichtlich mit homepage.julius durcheinander gebracht. In diesem speziellen Fall weiß ich genau, was der Fehler ist, aber wie kann man nur durch das Betrachten der Fehlermeldung wissen?

Antwort

2

Nachdem Sie http://hackage.haskell.org/package/shakespeare-2.0.8/docs/Text-Julius.html durchgegangen sind, sieht es so aus, als ob Sie versuchen, eine einfache Zeichenfolge in etwas einzubetten, das Javascript will.

Das wird normalerweise verhindert, damit jemand nicht schlechten Code in eine Seite injizieren kann, wenn Sie nur versuchen, eine von ihnen gelieferte Zeichenfolge anzuzeigen. Also ruf einfach rawJS drauf und es sollte einbetten? Oder Sie verwenden möglicherweise den falschen Interpolationstyp für die von Ihnen angegebene Variable (@,^oder #). Jessod ist besonders daran interessiert.

Das ist nur eine Vermutung, da ich julius nicht verwende.

+0

Sie haben Recht. Das habe ich versucht. Meine Frage ist jedoch anders. Betrachtet man die Fehlermeldung, wie lernt man die genaue Zeile in der julius/cassius/hamlet Vorlage kennen, die den Fehler verursacht? –

+0

Es gibt eine Option zum Speichern von Vorlagen-Hakerk-Spleißen während der Kompilierung, was etwas ist. Aber darüber hinaus wird die Quelle des Fehlers immer die Zeile in Ihrem Code sein, in der Sie sie aufgerufen haben. Aus diesem Grund benutze ich keine Vorlagen persönlich. –

+0

Es löst diese Frage nicht, aber Template Haskell kann Zeilen-Pragmas ausgeben, um nützlichere Fehlermeldungen zu erzeugen. Ich denke nur nicht, dass dieses Vorlagensystem damit beschäftigt ist. – glguy