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

问题描述 投票:-1回答:1

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

haskell yesod subroutine web-development-server keter
1个回答
0
投票

我离开了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中传递的函数,并在出错时再次调用它。

© www.soinside.com 2019 - 2024. All rights reserved.