【问题标题】:Haskell, Yesod and Keter - How can I run a routine periodically (every 5 minutes)?Haskell、Yesod 和 Keter - 我如何定期(每 5 分钟)运行一次例程?
【发布时间】:2018-11-25 11:04:25
【问题描述】:

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

【问题讨论】:

  • 当然,forkIO 是你的朋友。
  • @arrowd,你能给我一个代码示例吗?

标签: haskell yesod subroutine web-development-server keter


【解决方案1】:

我从 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

等到上午 10 点

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

捕捉错误

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-27
    • 2020-07-18
    • 2022-12-18
    • 1970-01-01
    • 2017-04-12
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多