【问题标题】:To update all the records that are growing in number in Rails更新 Rails 中数量不断增长的所有记录
【发布时间】:2016-06-26 19:34:29
【问题描述】:

我正在使用 MySQL 和 Rails 4.2.3。我有一张名为 onwers 的桌子,它会持续增长 2 周,因为有后台工作一直在喂它。

现在,我想更新 Rails 中的所有 Onwer 记录,以下是我完成这项工作的方式:

Owner.find_each(batch_size: 100) do |owner|
  Owner.get_owner_details_from_github owner.login
end

编写能够继续发挥作用的代码的最佳方法是什么?一方面,它将填充owners 表,另一方面,无论owners 中有多少记录,代码都会完成它的工作。

【问题讨论】:

    标签: mysql ruby-on-rails cron rails-activerecord


    【解决方案1】:

    一种方法是将这段代码放在一个 rake 任务中,并让一个 cron 作业在某个时间间隔运行该任务。

    您也可以使用 sidetiq 之类的工具:https://github.com/tobiassvn/sidetiq。它使用一个永久运行的守护进程 (sidekiq),并按照您定义的时间间隔将作业排入队列。

    【讨论】:

    • 感谢您的回答,但这不是重点。问题是owners 每次都在增长,所以这将是一种竞赛。在一个作业中,正在创建 Owner 记录,而在另一个作业中,正在更新相同的 Owner 记录。
    • 在名为logged_in_atowners 表中添加一个日期时间列,并在更新时将其设置为Time.now。让您的更新作业只查询owners,谁拥有nillogged_in_at。保持更新作业定期运行,它会不断减少新记录。如果您的创建作业可以触发事件而不是事后确定要更新的内容,那就更好了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多