Ruby on rails 过期日期的Rails侦听器
Ruby中是否有监听器之类的东西,或者类似的东西 例如,我如何检查用户日期是否已过期,是否需要在几天前发送电子邮件Ruby on rails 过期日期的Rails侦听器,ruby-on-rails,ruby,ruby-on-rails-5,listener,Ruby On Rails,Ruby,Ruby On Rails 5,Listener,Ruby中是否有监听器之类的东西,或者类似的东西 例如,我如何检查用户日期是否已过期,是否需要在几天前发送电子邮件 感谢您抽出宝贵的时间概括地说,有两种方法可以做到这一点: 定期对即将到期的物品进行调查,并发送相应的电子邮件。例如,您可以使用一个cron作业,该作业按照以下行运行代码: Model.where( 'expiration_date < ? AND expiration_date >= ?', Time.now + 3.days, Time.now ).ea
感谢您抽出宝贵的时间概括地说,有两种方法可以做到这一点:
Model.where(
'expiration_date < ? AND expiration_date >= ?',
Time.now + 3.days,
Time.now
).each do |m|
m.send_reminder_email
end
- 您需要对性能考虑多少?使用
应该没问题,但是使用频繁的cron作业进行轮询可能会导致问题;为了缓解这种情况,您可以考虑添加数据库索引,或者从从属副本数据库读取数据sidekiq
- 您是否担心在完全“随机”的时间发送电子邮件,例如凌晨2点?单独调度的作业可以考虑这一点,但在单个轮询cron作业中实现这一点会更容易。(或者这种行为正是我们所期望的!)
- 考虑如何最好地记录错误、处理部署、控制重新启动、从崩溃中恢复,等等。。。有很多工具可用于所有这些,但在生产应用程序中正确使用是很重要的
总的来说,我的建议是:
如果您是新手,并且/或者只是想快速启动并运行一些功能,请使用上面的选项1。但是,如果你正在构建一个需要在一个大系统中扩展的东西,那么认真考虑如何最好地实现选项2。
,大体上说,有两种方式来做到这一点:
Model.where(
'expiration_date < ? AND expiration_date >= ?',
Time.now + 3.days,
Time.now
).each do |m|
m.send_reminder_email
end
- 您需要对性能考虑多少?使用
应该没问题,但是使用频繁的cron作业进行轮询可能会导致问题;为了缓解这种情况,您可以考虑添加数据库索引,或者从从属副本数据库读取数据sidekiq
- 您是否担心在完全“随机”的时间发送电子邮件,例如凌晨2点?单独调度的作业可以考虑这一点,但在单个轮询cron作业中实现这一点会更容易。(或者这种行为正是我们所期望的!)
- 考虑如何最好地记录错误、处理部署、控制重新启动、从崩溃中恢复,等等。。。有很多工具可用于所有这些,但在生产应用程序中正确使用是很重要的
总的来说,我的建议是:
如果您是新手,并且/或者只是想快速启动并运行一些功能,请使用上面的选项1。但是,如果你正在构建一个需要在一个大系统中扩展的东西,那么认真考虑如何最好地实现选项2。< /P>是什么?轨道3还是轨道4?无论如何,你可能在找一份背景工作。有很多关于如何在互联网站上进行的指导。嗨,实际上是rails 5,但是没有rails 5标签?抱歉搞混了。感谢您的建议,我将阅读有关后台作业的内容。请注意,这里有传统的后台作业:您创建一个“worker”,它在专用于异步执行这些任务的服务器上执行,并且您有在特定时间触发的Cron作业。有很多gem允许执行异步任务(比如Sidekiq),也有其他gem执行Cron作业。你可以查看这篇文章,例如:它是哪一个?轨道3还是轨道4?无论如何,你可能在找一份背景工作。有很多关于如何在互联网站上进行的指导。嗨,实际上是rails 5,但是没有rails 5标签?抱歉搞混了。感谢您的建议,我将阅读有关后台作业的内容。请注意,这里有传统的后台作业:您创建一个“worker”,它在专用于异步执行这些任务的服务器上执行,并且您有在特定时间触发的Cron作业。有很多gem允许执行异步任务(比如Sidekiq),也有其他gem执行Cron作业。您可以查看本文,例如: