从现在起15分钟内在Rails中执行任务

时间:2017-05-13 11:24:59

标签: ruby-on-rails task jobs

我正在创建一个Rails应用程序,让用户预订活动门票。

一旦用户选择了他想要购买的机票,他就有15分钟的时间来完成结账,否则机票将被释放并且可以由其他人预订。

我怎样才能“阻止”15分钟并在15分钟后再次使用?

2 个答案:

答案 0 :(得分:1)

在故障单模型(或您正在使用的任何模型)中有一个状态字段,并在用户选择时将其标记为partially_booked。

如果您正在使用延迟工作,

handle_asynchronously :your_method_here, :run_at => Proc.new { 15.minutes.from_now }

如果您使用的是sidekiq,

YourWorker.perform_in(15.minutes, ticket_id)

其中' your_method_here'或者' YourWorker'将包含检查预订是否已完成的逻辑,如果未完成则将其标记为未分配。

答案 1 :(得分:1)

ActiveJob有助于在后台完成工作。使用ActiveJob,您可以为延迟的操作生成作业,并将它们排入队列以便以后执行。您可以在模型中添加一个布尔字段,如reserved,并在用户首次保留并运行后台作业时将其设置为true,以便在15分钟后用户无法完成购买,请将其设置为为假:

TicketJob.set(wait_until: 15.minutes.from_now).perform_later(@ticket)

Active Job是一个框架,用于声明作业并使它们在各种排队后端上运行。要设置ActiveJob的后端,请查看DelayedJob。它简单而且足够好。