首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails帐户更新功能

Rails帐户更新功能
EN

Stack Overflow用户
提问于 2015-11-13 07:05:03
回答 2查看 74关注 0票数 0

我想创建关于帐户更新的功能。如果该账户将在2015/11/20年度到期,则该账户只有七天的续订时间,否则将改为非活动账户。我怎样才能用cancancan和设计创业板或其他方式来存档呢?谢谢..。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-13 09:53:38

这将以日程安排为基础:

  • 每天,调度程序将提取当天“过期”的每个帐户。
  • 使用返回的帐户,它将把它们放入队列(可能在Redis上)。
  • 另一个任务每天在队列中循环,直到过期之日,当帐户从队列中移除并变为“非活动”时。

要做到这一点,您需要在您的active模型中有一个Account属性,以便您可以定义它是否应该被视为活动的。您还将需要一个expires_at属性,以确定其过期日期。

然后使用类似于ResQue的东西来管理队列(它使用Redis),并且使用Rake来获取所需的数据。

--

查找

首先,您必须创建一个调度程序。

这将在OS级别完成(它必须根据请求调用Rails函数)。

如果您使用Heroku,您将能够使用Heroku Scheduler插件,这是Heroku的包装器,用于cron作业。

或者,如果运行非托管/共享宿主,也可以使用cron作业。

你可以在这里阅读有关cron作业的文章

软件实用程序Cron是类似Unix的计算机操作系统中基于时间的作业调度程序.设置和维护软件环境的人员使用cron调度作业(命令或shell脚本),定期在固定时间、日期或间隔运行。

您应该设置一个cron作业,以便从cmd运行rake (Cron基本上是调用cmd/bash的一种智能方法--允许您从它运行命令)。

因此,您将使用一些像这样

代码语言:javascript
运行
复制
0 0 * * * rake accounts:activate

--

瑞克

这必须由一个rake任务(它位于lib/tasks/your_rake_task.rb中)进行备份。

代码语言:javascript
运行
复制
#app/models/account.rb
class Account < ActiveRecord::Base
   scope :expires_tday, -> { where("expires_at = ?", Time.zone.now.beginning_of_day) }
end

#lib/tasks/account_activator.rake
namespace :accounts do
  desc "Find expired accounts & put them into queue"
  task :activate => :environment do
      accounts = Account.expires_tday
      accounts.each do |account|
         $redis.add(account.id, account.expires_at) #-> will have to set up redis
      end
  end

  task :expire => :environment do
      /// look up accounts in redis and assign them as "expired"
  end
end

这应该是您即将到期的帐户的每日快照,将其发送到Redis队列,然后您可以使用类似的设置来处理该队列:

--

Redis

Redis是一个半持久化的数据存储,有点像你的应用程序的RAM。

您可以将key:value对添加到Redis实例中,允许您将其用于队列等。

我会亲自将即将过期的帐户发送到Redis安装,然后允许我每天执行另一个cron,在帐户到期时将帐户指定为expired

代码语言:javascript
运行
复制
0 0 * * * rake accounts:expire

这也可以通过Resque实现。

票数 1
EN

Stack Overflow用户

发布于 2015-11-13 07:40:07

坎坎坎用于技能,而设计则用于认证。

但是,您想要做的是不断查看用户,查看谁是活动的,谁将很快过期,并对用户的状态执行一些操作。

如果这是正确的,那么您应该看到的是运行cron作业(即每天重复执行的任务),该任务将在每天特定的时间对用户进行检查,以获取处于特定状态的用户,并对其执行任何您想要的操作。

有几个资源可以帮助您实现这一点。你可以找到关于那个红宝石工具箱里的。的信息

这些措施包括:

  • 什么时候都行
  • Rufus调度程序
  • Resque调度器
  • 发条
  • 克拉肯
  • 塔斯基特
  • 复发性

其中每一个都有关于如何实现它的文档。

希望这会有帮助..。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33687459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档