haskell - Haskell、Yesod 和 Keter - 我如何定期(每 5 分钟)运行一次例程?
问题描述
我想定期运行一些数据库查询,并根据其状态向用户电子邮件发送通知并更改其帐户状态。我可以在 Yesod 内部进行吗?
解决方案
我离开了 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
此代码点使用unsafeHandler
和forkHandler
。
等到上午 10 点
我不知道你的时区、环境、数据库结构等,所以我希望你自己写细节。例如,如果您将threadDelay 放入forever 并每十分钟检查一次,则将您发送邮件的日期放入数据库中,如果您不发送并且超过上午10 点,则调用它。
捕获错误
请决定发生错误时应进行何种处理。
我想以一种永不停止的方式处理错误
您可以命名要在 forkHandler 中传递的函数,并在出错时再次调用它。
推荐阅读
- emacs - Emacs 拆分窗口中的 iPython 不能停留在原来的位置
- java - 你能停止 Spring Cloud 重新绑定/重新加载使用 @ConfigurationProperties 注释的 POJO 吗?
- php - Mysql的选择中返回多少行?
- ansible - Ansible/jinja2 YAML 文件中的“:&”是什么意思?
- android - 当应用程序处于后台时,如何为 Firebase 通知显示自定义 UI?
- c++ - Hinnant 的堆栈分配器和异常
- python - 两个服务之间的 Kubernetes 连接?
- php - 发生错误时如何重新运行脚本?
- git - 遥控器中的文件没有被删除
- android - (Android) 房间数据库迁移不会改变数据库