【问题标题】:Rails update user status after 3 days - cron job alternativeRails 3 天后更新用户状态 - cron 作业替代
【发布时间】:2021-04-20 17:29:14
【问题描述】:

在我的应用程序中,如果未通过法律测试,则可能会阻止用户 - 这意味着用户模型将其状态从活动更改为非活动user.status = 'inactive'。业务要求是在 3 天后将状态恢复为活动状态。

我知道我可以使用如下的 cron 作业:

every 1.day, :at => '12:00 am' do
  User.where(status_updated_at: Date.today <= 3.days.ago)
        .update_all(status: 'active')
end

但不是搜索整个用户数据库,也许还有另一种更好的方法来实现这一点?

【问题讨论】:

  • 你在使用 sidekiq、resque、delayed_job 吗?一种解决方案是在 3 天后专门为该用户安排一项工作,使其再次处于活动状态。我为此使用github.com/resque/resque-scheduler
  • 这还没有指定,但我可能会使用delayed_job。好的,我将拥有 1k 个用户,这可能与 cron 作业相同。我看不出有什么区别。
  • “搜索整个用户数据库” – 该查询运行多长时间?
  • @Stefan 该应用程序处于早期阶段,我不能说,但仅在数据库中搜索这不是一个“非常可扩展”的解决方案

标签: ruby-on-rails ruby


【解决方案1】:

您实际上不需要安排工作,您可以在需要时(即用户实际尝试登录)使用after_initialize 进行此操作

class User

  after_initialize :reinstate_if_ready

  def reinstate_if_ready
    self.status = 'active' if status_updated_at.nil? || status_updated_at <= 3.days.ago)
  end

结束

【讨论】:

  • 好的,但是如果用户不注销它仍然可以工作吗?
  • 是的,因为每次浏览器提交都会重新加载用户记录。所以基本上每次浏览器调用它都会加载用户记录并执行 after_initialize 方法。
猜你喜欢
  • 2018-04-18
  • 2020-08-01
  • 2012-04-28
  • 2013-09-19
  • 2014-03-08
  • 2013-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多