Rails Rufus 调度程序持久性
Rails Rufus Scheduler Persistence
我的 Rails 应用程序中有一个 rufus 调度程序,我使用它从 9:30AM 到 4:00PM 周一至周五每 5 分钟 record/insert 数据。包含此操作的方法会在用户注册后立即触发。但是一旦用户注销,这个日志作业就会被拦截和终止。
任何人都可以帮助弄清楚如何在用户日志 out/session 被销毁时保持日志记录方法吗?
我正在我的用户控制器创建方法中调用日志记录方法,并且我已经在用户模型中设置了日志记录方法。
如有任何帮助,我们将不胜感激!
听起来很费解。你为什么不使用一个单独的计划作业,即从 9:30AM 到 4:00PM 每 5 分钟为系统中注册的每个用户使用 运行 周一到周五。
do_log =
lambda do
User.where(status: 'active').each do |u|
# do the insertion for the user...
end
end
scheduler.cron('30,35,40,45,50,55 9 * * mon-fri America/New_York', &do_log)
scheduler.cron('*/5 10-15 * * mon-fri America/New_York', &do_log)
User.where(status: 'active')
是 Sequel,在 Rails 中可能有所不同,但我相信您可以翻译并适应您的设置和需求。
因此,只要用户在您的系统中注册,就会开始为他记录日志,即使他已经注销。
是的,我知道这不是一项工作,而是两项工作,但这满足了“0930 到 1630”的要求。
也许这不是你想要的,但你的问题不是很清楚...
更新 2021-01-30 - 1416+0900
@hurricanenara 评论道:
I'm not certain where the do_log would be called to act as an all-encompassing job that will be applied to all "active" users during the scheduled times
do_log
将被称为 '30,35,40,45,50,55 9 * * mon-fri America/New_York'
和 '*/5 10-15 * * mon-fri America/New_York'
,这符合您的要求:
every 5 minutes from 9:30AM to 4:00PM Mon-Fri
如果对你来说更容易,do_log
可以“忘记”写
scheduler.cron('30,35,40,45,50,55 9 * * mon-fri America/New_York') do
User.where(status: 'active').each do |u|
# do the insertion for the user...
end
end
scheduler.cron('*/5 10-15 * * mon-fri America/New_York') do
User.where(status: 'active').each do |u|
# do the insertion for the user...
end
end
如您所见,do_log
lambda 避免了重复(不要重复自己,DRY)。
此方法假定当“用户已注册”在您的系统中时,他们将被添加到数据库中的用户 table 中,前面是 User
模型。 do_log
只是遍历所有状态为“活动”(不是“离开”、“已撤销”或“随便”)的用户,并记录该特定用户的信息。
您的问题描述含糊不清。我猜你想为每个用户记录,因为你想记录信息“即使用户日志 out/session 被销毁”。
我不知道你所说的“坚持记录方法”是什么意思。我不确定你的意思是“坚持到磁盘”,所以我猜你的意思是“继续 运行ning”。
作为开发人员,您有责任清楚地说明您的问题。大多数情况下,清楚地陈述问题的努力会为您提供答案,而无需其他开发人员倾听。另见 Rubber Ducking.
我的 Rails 应用程序中有一个 rufus 调度程序,我使用它从 9:30AM 到 4:00PM 周一至周五每 5 分钟 record/insert 数据。包含此操作的方法会在用户注册后立即触发。但是一旦用户注销,这个日志作业就会被拦截和终止。
任何人都可以帮助弄清楚如何在用户日志 out/session 被销毁时保持日志记录方法吗?
我正在我的用户控制器创建方法中调用日志记录方法,并且我已经在用户模型中设置了日志记录方法。
如有任何帮助,我们将不胜感激!
听起来很费解。你为什么不使用一个单独的计划作业,即从 9:30AM 到 4:00PM 每 5 分钟为系统中注册的每个用户使用 运行 周一到周五。
do_log =
lambda do
User.where(status: 'active').each do |u|
# do the insertion for the user...
end
end
scheduler.cron('30,35,40,45,50,55 9 * * mon-fri America/New_York', &do_log)
scheduler.cron('*/5 10-15 * * mon-fri America/New_York', &do_log)
User.where(status: 'active')
是 Sequel,在 Rails 中可能有所不同,但我相信您可以翻译并适应您的设置和需求。
因此,只要用户在您的系统中注册,就会开始为他记录日志,即使他已经注销。
是的,我知道这不是一项工作,而是两项工作,但这满足了“0930 到 1630”的要求。
也许这不是你想要的,但你的问题不是很清楚...
更新 2021-01-30 - 1416+0900
@hurricanenara 评论道:
I'm not certain where the do_log would be called to act as an all-encompassing job that will be applied to all "active" users during the scheduled times
do_log
将被称为 '30,35,40,45,50,55 9 * * mon-fri America/New_York'
和 '*/5 10-15 * * mon-fri America/New_York'
,这符合您的要求:
every 5 minutes from 9:30AM to 4:00PM Mon-Fri
如果对你来说更容易,do_log
可以“忘记”写
scheduler.cron('30,35,40,45,50,55 9 * * mon-fri America/New_York') do
User.where(status: 'active').each do |u|
# do the insertion for the user...
end
end
scheduler.cron('*/5 10-15 * * mon-fri America/New_York') do
User.where(status: 'active').each do |u|
# do the insertion for the user...
end
end
如您所见,do_log
lambda 避免了重复(不要重复自己,DRY)。
此方法假定当“用户已注册”在您的系统中时,他们将被添加到数据库中的用户 table 中,前面是 User
模型。 do_log
只是遍历所有状态为“活动”(不是“离开”、“已撤销”或“随便”)的用户,并记录该特定用户的信息。
您的问题描述含糊不清。我猜你想为每个用户记录,因为你想记录信息“即使用户日志 out/session 被销毁”。
我不知道你所说的“坚持记录方法”是什么意思。我不确定你的意思是“坚持到磁盘”,所以我猜你的意思是“继续 运行ning”。
作为开发人员,您有责任清楚地说明您的问题。大多数情况下,清楚地陈述问题的努力会为您提供答案,而无需其他开发人员倾听。另见 Rubber Ducking.