我创建了一个Rails应用程序,让用户为事件预订门票。从现在起在Rails中执行15分钟的任务
一旦用户选择了他想购买的票,他有15分钟时间完成结账,否则票将被释放并可以由其他人预订。
如何在15分钟后“封锁”票15分钟并使其再次可用?
我创建了一个Rails应用程序,让用户为事件预订门票。从现在起在Rails中执行15分钟的任务
一旦用户选择了他想购买的票,他有15分钟时间完成结账,否则票将被释放并可以由其他人预订。
如何在15分钟后“封锁”票15分钟并使其再次可用?
在您的票据模型(或您使用的任何模型)中有状态字段,并在用户选择它时将其标记为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”将包含逻辑检查,如果预订已完成或不是,如果未完成,则将其标记为未分配。
ActiveJob
有助于在后台完成工作。使用ActiveJob
,您可以为延迟的操作生成作业,并将它们排入队列以供稍后执行。您可以向模型添加一个布尔字段,如reserved
,并在用户首次预留并运行后台作业时使其成为true,以便在15分钟后用户不会完成购买,将其设置回false:
TicketJob.set(wait_until: 15.minutes.from_now).perform_later(@ticket)
活动作业是用于声明作业并使其在各种排队后端上运行的框架。要设置ActiveJob
的后端,请查看DelayedJob。这很简单,足够好。
ActiveJob(内置于Rails)和DelayedJob/Sidekiq/Resque之间有什么区别? –
'ActiveJob'是围绕作业处理后端的标准包装器,如DelayedJob,Resque或sidekiq,以便您可以用同样的方式与所有人交谈。例如,您可以随时将后端从Resque更改为Sidekiq,而无需更改Job类别。 –
如果你想显示完成购买的剩余时间,你可以创建一个'Reservation'模型[像这样](https://image.ibb.co/dQvPgQ/Screen_Shot_1396_02_24_at_12_26_27.png),并获得当前时间和预留created_at时间。 –
您可以使用delayed_job在15分钟后运行任务吗? – django
http://stackoverflow.com/questions/5494369/how-to-schedule-a-function-to-execute-at-a-future-time – Iceman