2016-07-08 7 views
3

다음과 같은 오류 메시지가 주어 (초보자 경고)Yesod 오류 메시지를 효과적으로 읽는 방법은 무엇입니까?

, 오류의 원인에 도착하는 가장 빠른 방법은 무엇 :

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... 

나는 간단한 스캐 폴딩 사이트 (NO DB)와 함께 일하고 있어요 및 의도적으로 homepage.julius으로 엉망이되었습니다. 이 특별한 경우에는 오류가 무엇인지 정확히 알고 있지만 오류 메시지를보고 어떻게 알 수 있습니까?

답변

2

http://hackage.haskell.org/package/shakespeare-2.0.8/docs/Text-Julius.html을 읽은 후에는 자바 스크립트를 원하는 무언가에 일반 문자열을 포함시키려는 것처럼 보입니다.

일반적으로 제공 한 문자열을 표시하려고 할 때 다른 사람이 페이지에 잘못된 코드를 삽입 할 수 없도록 방지됩니다. 그래서 rawJS를 호출하면 embed해야합니다. 또는 공급하는 변수에 잘못된 보간 유형을 사용하고 있습니다 (@,^또는 #). Yesod는 그것에 관해서 특히 중요합니다.

나는 julius를 사용하지 않기 때문에 그냥 추측합니다.

+0

정확합니다. 그게 내가하려는 일이야. 그러나 내 질문은 다릅니다. 오류 메시지를보고 julius/cassius/hamlet 템플리트에서 오류의 원인이되는 정확한 행을 어떻게 알 수 있습니까? –

+0

컴파일 중에 template haskell splices를 덤프하는 옵션이 있습니다. 그러나 오류의 원인은 코드를 호출 한 곳의 코드 라인이 될 것입니다. 이것이 제가 개인적으로 템플릿을 사용하지 않는 이유입니다. –

+0

이 질문은 해결되지 않지만 템플릿 Haskell은보다 유용한 오류 메시지를 생성하기 위해 라인 pragma를 낼 수 있습니다. 나는이 템플릿 시스템이 그 일로 귀찮다 고 생각하지 않는다. – glguy