【问题标题】:Execute a function when a time is equal to a certain value in Rails 6在Rails 6中当时间等于某个值时执行一个函数
【发布时间】: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


【解决方案1】:

您有两个选择使用 sidekiq 作业或使用每当作业 gem https://github.com/mperham/sidekiq/wiki/Scheduled-Jobs 每当允许您设置特定的日期和时间时,请查看文档以获取更多信息 https://github.com/javan/whenever

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 2019-06-16
    • 2020-10-11
    相关资源
    最近更新 更多