Haskell,Yesod和Keter - 我如何定期(每5分钟)运行一次例行程序?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Haskell,Yesod和Keter - 我如何定期(每5分钟)运行一次例行程序?相关的知识,希望对你有一定的参考价值。

我想定期运行一些数据库查询,并根据其状态向用户发送通知电子邮件并更改其帐户状态。我可以在Yesod本身内完成吗?

答案

我离开了Yesod的问题。

Run Handler code at a specific time within yesod · Issue #1529 · yesodweb/yesod


我不知道你的完整代码。所以,这是提案。

makeApplication :: App -> IO Application
makeApplication foundation = do
    unsafeHandler foundation $
        forkHandler (\_ -> catchError) $ forever $ do -- catchError do not exist
          waitUntil10AM         -- waitUntil10AM do not exist
          getCheckupR
    logWare <- makeLogWare foundation
    -- Create the WAI application and apply middlewares
    appPlain <- toWaiAppPlain foundation
    return $ logWare $ (acceptOverride . autohead . gzip def) appPlain

这个代码点使用unsafeHandlerforkHandler

waitUntil10AM

我不知道您的时区,环境,数据库结构等,所以我希望您自己编写详细信息。例如,如果您永久地放置threadDelay并每十分钟检查一次,请将您已发送邮件的日期放在数据库中,如果您不发送它,则将其调用,并且超过10AM。

catchError

请确定在出错时应该进行哪种处理。

我想以一种永不停止的方式处理错误

您可以命名要在forkHandler中传递的函数,并在出错时再次调用它。

以上是关于Haskell,Yesod和Keter - 我如何定期(每5分钟)运行一次例行程序?的主要内容,如果未能解决你的问题,请参考以下文章

Haskell:Yesod 和 Esqueleto

Haskell语言学习笔记(69)Yesod

“类型变量不明确”在 Haskell Yesod 中使用 Persistent

如何在 Yesod 中捕获异常而不杀死站点?

Haskell Yesod - 执行 POST 请求时浏览器 OPTIONS 请求的 CORS 问题

如何使用 Yesod 正确处理 JWT 的到期日期?