我想创建关于帐户更新的功能。如果该账户将在2015/11/20年度到期,则该账户只有七天的续订时间,否则将改为非活动账户。我怎样才能用cancancan和设计创业板或其他方式来存档呢?谢谢..。
发布于 2015-11-13 01:53:38
这将以日程安排为基础:
要做到这一点,您需要在您的active
模型中有一个Account
属性,以便您可以定义它是否应该被视为活动的。您还将需要一个expires_at
属性,以确定其过期日期。
然后使用类似于ResQue的东西来管理队列(它使用Redis),并且使用Rake来获取所需的数据。
--
查找
首先,您必须创建一个调度程序。
这将在OS级别完成(它必须根据请求调用Rails函数)。
如果您使用Heroku,您将能够使用Heroku Scheduler
插件,这是Heroku的包装器,用于cron作业。
或者,如果运行非托管/共享宿主,也可以使用cron作业。
软件实用程序Cron是类似Unix的计算机操作系统中基于时间的作业调度程序.设置和维护软件环境的人员使用cron调度作业(命令或shell脚本),定期在固定时间、日期或间隔运行。
您应该设置一个cron作业,以便从cmd运行rake
(Cron基本上是调用cmd/bash的一种智能方法--允许您从它运行命令)。
因此,您将使用一些像这样
0 0 * * * rake accounts:activate
--
瑞克
这必须由一个rake
任务(它位于lib/tasks/your_rake_task.rb
中)进行备份。
#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
:
0 0 * * * rake accounts:expire
这也可以通过Resque
实现。
发布于 2015-11-12 23:40:07
坎坎坎用于技能,而设计则用于认证。
但是,您想要做的是不断查看用户,查看谁是活动的,谁将很快过期,并对用户的状态执行一些操作。
如果这是正确的,那么您应该看到的是运行cron作业(即每天重复执行的任务),该任务将在每天特定的时间对用户进行检查,以获取处于特定状态的用户,并对其执行任何您想要的操作。
有几个资源可以帮助您实现这一点。你可以找到关于那个红宝石工具箱里的。的信息
这些措施包括:
其中每一个都有关于如何实现它的文档。
希望这会有帮助..。
https://stackoverflow.com/questions/33687459
复制相似问题