2016-07-08 4 views
3

(初心者の警告)次のエラーメッセージ、エラーのソースを取得する最も簡単な方法は何を考えるYesodエラーメッセージを効果的に読むには?

:私は、単純なスキャフォールドサイト(無DB)で働いている

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

をし、意図的にhomepage.juliusと混乱しています。この特定の例では、私はエラーが何であるかを正確に知っていますが、エラーメッセージを見るだけでどのように知ることができますか?

答えて

2

http://hackage.haskell.org/package/shakespeare-2.0.8/docs/Text-Julius.htmlを熟読したあと、javascriptが必要なものにプレーンな文字列を埋め込むように見えます。

これは、通常、提供された文字列を表示しようとしているときに誰かが悪いコードをページに注入できないように防止されています。それで、rawJSを呼び出して埋め込む必要がありますか?または、あなたが供給している変数(@、^、または#)に間違った補間タイプを使用している可能性があります。イエスはそれについて特に思います。

私はジュリウスを使用していないので、ちょうど推測です。

+0

あなたは正しいですか?それが私がやろうとしていたことです。しかし、私の質問は異なっています。エラーメッセージを見ると、エラーの原因となっているjulius/cassius/hamletテンプレートの正確な行をどのように知ることができますか? –

+0

コンパイル時にテンプレートのhaskellスプライスをダンプするオプションがあります。しかし、それを超えて、エラーの原因はいつもあなたのコード内の行になります。これがテンプレートを個人的に使用しない理由です。 –

+0

これは解決しませんが、テンプレートHaskellは、より有用なエラーメッセージを生成するためにラインプラグマを発行することができます。私はちょうどこのテンプレートシステムがそれで気にしないと思う。 – glguy

関連する問題