首页 > 解决方案 > Haskell、Yesod 和 Keter - 我如何定期(每 5 分钟)运行一次例程?

问题描述

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

标签: haskellyesodsubroutineweb-development-serverketer

解决方案


我离开了 Yesod 的问题。

在 yesod 内的特定时间运行处理程序代码 · 问题 #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

等到上午 10 点

我不知道你的时区、环境、数据库结构等,所以我希望你自己写细节。例如,如果您将threadDelay 放入forever 并每十分钟检查一次,则将您发送邮件的日期放入数据库中,如果您不发送并且超过上午10 点,则调用它。

捕获错误

请决定发生错误时应进行何种处理。

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

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


推荐阅读