检查新记录

时间:2015-01-23 03:45:52

标签: ruby-on-rails ruby

我有一个有趣的困境。我有一个应用程序,当创建一个新记录(在这种情况下是一个用户)时,它将被发布到另一个应用程序(具体信息是)。

现在我可以使用User.last并获得最新最好的内容。保存记录后立即发布,只需要一秒钟。假设我有500个用户立即注册。

发布到第二个应用程序的500条新记录,对于我需要说的每一条:

如果此用户是新用户,请使用它执行x,否则请忽略它。

我正在使用whenever gem在第二个应用程序上创建一个cron作业,该应用程序每5秒钟监视一次新记录。在那个时候可能会有5个新的recods通过,所以我需要更新上面的声明说:

如果记录为5秒或更短时间用x做,则忽略它。

我可以执行以下操作:

Users.all.each do |u|
  *if u is 5 seconds or less old*
    do something here
  end
end

我不确定if语句是什么,它是u.created_at <= 5.seconds ??

2 个答案:

答案 0 :(得分:1)

User.where('created_at >= ?', 5.seconds.ago)会找到不超过五秒的记录。但听起来你可能会更好地使用API​​将创建事件推送到你的第二个应用程序。

答案 1 :(得分:1)

可以。它看起来像这样:

gauge = Time.now - 5
Users.all.each do |u|
  u.created_at >= gauge
    # do something here
  end
end

问题是运行循环需要时间。即使您运行了更高效的查询,您仍然依赖时间戳来获得高精度。

User.where('created_at >= ?', Time.now - 5)

如果系统出现延迟,假设计算机需要0.5秒才能查询,您将错过在.5秒间隙内创建的所有用户。最好向用户添加published列,将记录标记为已发布,然后检查未发布的记录。

users = User.where(published: nil)
users.each { |u| u.publish }

或者,正如另一篇文章所述,寻找一个推动创建活动的API。