私の Yesod ハンドラー関数の 1 つのコードを次に示します。
import qualified Data.Text.Lazy as LT
import qualified Data.Text.Lazy.Builder as TLB
SomeRouteR= do
-- ................
code <- someFuncAccessDB
render <- getUrlRenderParams
let tmpl = $(textFileReload "templates/some.txt")
sms_content = LT.toStrict $ TLB.toLazyText $ tmpl render
$(logDebug) $ "trying to send SMS: " `mappend` sms_content
-- ....
「some.txt」には次のような行が含まれています。
the code is #{code}
しかし、logDebug 行は、「sms_content」が「code」の新しい値に応じて変化しないことを報告しています。つまり、別の新しいリクエストで 'code' の値が変更された場合、'sms_content' には前回のリクエストの古い値が残っています。Yesod が 'sms_content' の最後の値をキャッシュしているようです。
私の間違いは何ですか?
編集: textFileReload を textFile に変更すると、問題はなくなりました。したがって、ここで「リロード」の意味を誤解しなければなりません。誰でも手がかりを教えてもらえますか?