ruby-on-rails - 如何在 ruby on rails 中创建短暂的数据库条目?
问题描述
我想创建一些应该是短暂的,1 天左右的通知。这样,如果用户今天访问所有通知,我就可以发送这些通知,但明天不行。
假设有人正在创建一些帖子,我想在帖子上传成功时向他们发送通知。但该通知明天就无关紧要了,而且会造成不必要的混乱。
我考虑Sidekiq
过在一个钩子中使用该过程,after_commit
触发一个sidekiq
作业在之后运行18 hrs
,例如:
after_commit :trigger_destroyer
private
def trigger_destroyer
if notification_type == 'shortlived'
NotificationDestroyer.perform_in(3.hours.from_now, id)
end
end
或者我可以运行一个读取 created_at 和通知类型的 cron 作业并在那里删除它们。
有没有更好的方法?
解决方案
您可以创建一个清除整个表的ActiveJob或 Rake 任务:
class NotificationCleanupJob < ApplicationJob
queue_as :default
def perform
Notification.where('created_at < ?', 30.days.ago).delete_all
end
end
有多种 gem 可用于设置重复性工作,例如whenever
、和. Heroku 也有一个内置的调度器。chrono
clockwork
rufus-scheduler
这比设置一次执行这一行的作业要有效得多,这几乎会不断地消耗工作进程。
当您在 Rails 中显示/使用记录时,这应该与过滤相结合。
推荐阅读
- c# - 设置 UWP 目标系统
- ruby-on-rails - 如何为表中的列中的特定值创建方法?
- php - 当 SQL 字符串具有“%f”时,Wordpress wpdp->getResults 不执行我的 sql
- ios - 将 Flutter 集成到 CocoaTouch SDK 中?
- system-verilog - 将 8 位值传递给 1 位端口?
- protocol-buffers - 如何将 OpenAPI Spec (Swagger 2.0) 转换为 proto3?
- python - 从坐标列表中分配所有可能的顶点组合并对其进行缩放
- c# - 即使在使用事务时,C# SQLite Bulk 参数化 DELETE 也会很慢?
- php - 在 Woocommerce 商店循环中添加限制为可用数量的产品数量字段
- angular - 在 Kubernetes 中运行 npm 应用程序