2011-07-11 25 views
0

我试图实现一个调度程序任务,该任务删除用户表中滥用超过5次的用户。为了在user.rb文件中实现此目的,我返回了一个report_abuse_delete方法,该方法执行查找滥用超过5次的用户并从数据库中删除其记录的功能。使用任何时候使用gem in rails 3来实现调度任务

这里是我的用户模型的方法:

def report_abuse_delete 

@delete_abused_user= Abuse.find(:all, :conditions=>['count>=?',5]) 

@delete_abused_user.each do |d| 

    @abused_user= User.find(d.abuse_id) 

     if @abused_user.delete 

     render :text=> "User account has been deleted. Reason: This user has been reported spam for more than 5 times" 

     UserMailer.user_delete_five_spam_report(@user).deliver 

     end 

end 
end 

而这就是我写的Scheduler.rb文件

every 2.minutes do 
    rake "log:clear", :environment => "development" 

    runner "User.report_abuse_delete", :environment => "development" 
end 

正如你可以在scheduler.rb文件我看到试图执行2个函数之一是每2分钟清理一次日志,并尝试运行我在模型中编写的report_abuse_delete方法。

我每2分钟就会遇到一个问题,我的日志正在清除,但是我在模型中写入的方法没有被调用,我猜这个功能没有被触发。我搜查了所有的网络,并检查了各种可能的方式。我无法弄清楚问题是什么。

请帮我解决。任何形式的帮助都是值得欢迎的。

回答

1

您已经定义report_abuse_delete作为一个正常的 - 这是实例 - 方法,但你调用它作为一个方法。尝试将方法定义为def self.report_abuse_delete

此外,我不知道render调用是否可以正常工作:我没有使用过这个gem,但由于您没有任何类型的用户代理来查看文本,所以我不确定您我希望它能做到。

+0

谢谢Chowlett。它的工作。 – Sam

+0

不用担心。这里第一个好问题!记住你可以表明这个答案通过增加投票来帮助你(点击向上箭头);您也可以通过点击空的复选标记来接受它。 – Chowlett