【发布时间】:2020-02-12 10:46:36
【问题描述】:
我正在建立一个在线电子商务商店,并且我正在尝试使用带有动作电缆的 rails 来将产品从缺货更新为在特定日期时间有货,例如12:00:00 2020-02-19。
想法是,时间一到,我就想推一个Websocket,该产品现在已经可用了。
我尝试了一些解决方案,例如:
Thread.new do
while true do
if **SOMETIME** == Time.now
ActionCable.server.broadcast "product_channel",content: "product-in-stock"
end
end
end
这种方法的主要问题是它会创建另一个线程并使 Rails 无响应。此外,如果这个值设置为从现在开始的 1 周,我不希望每个查询端点的用户都创建一个像这样运行的全新线程。
【问题讨论】:
-
是否可以选择创建一个 Rails 任务并创建一个调用您的任务的 cron 作业? IE。
bundle exec rails my_notification_task -
@hernanvicente 谢谢你的建议,问题是每个产品都有不同的发布时间,我想动态设置。
-
我建议使用 Sidekiq。它允许动态设置执行作业的时间。
MyWorker.perform_at(**SOMETIME**)github.com/mperham/sidekiq/wiki/Scheduled-Jobs -
我很好奇为什么通知是基于时间而不是基于数据库何时更新为更多库存?
标签: ruby-on-rails ruby websocket actioncable