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

Fre*_*ins 0 jobs ruby-on-rails task

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

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

如何“阻止”票证 15 分钟并在 15 分钟后使其再次可用?

roh*_*han 5

在您的票证模型(或您使用的任何模型)中有一个状态字段,并在用户选择它时将其标记为 partial_booked。

如果您使用延迟作业,

handle_asynchronously :your_method_here, :run_at => Proc.new { 15.minutes.from_now }
Run Code Online (Sandbox Code Playgroud)

如果您使用 sidekiq,

YourWorker.perform_in(15.minutes, ticket_id)
Run Code Online (Sandbox Code Playgroud)

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


Are*_*ani 5

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

TicketJob.set(wait_until: 15.minutes.from_now).perform_later(@ticket)
Run Code Online (Sandbox Code Playgroud)

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