每当用于执行方法rails 4

时间:2015-01-26 20:36:02

标签: ruby-on-rails ruby-on-rails-4 whenever

我正在尝试每隔30分钟使用when执行一个方法。但是我在安装时遇到了一些麻烦。

schedule.rb

every 1.minutes do
    runner "Post.winner"
end

post.rb

class Post < ActiveRecord::Base

module Post
    def winner
        #do some stuff that saves a new value in database

我不认为跑步者正在工作,因为我保存值的字段在控制台中仍显示为nil。

2 个答案:

答案 0 :(得分:3)

您很可能不想运行控制器方法(例如,您没有请求在那里服务)。从类或模块创建runner

# schedule.rb
every 30.minutes do
  runner "Post.winner"
end

#lib/post.rb
module Post
  def self.winner
    ...
  end
end

rake

中的lib/tasks/任务
# schedule.rb
every 30.minutes do
  rake post:winner
end

#lib/tasks/post.rake

namespace :post do    
  desc 'calculate winner'
  task :winner do
    ...
  end
end

答案 1 :(得分:0)

我几乎可以肯定你有一个模型Post。创建一个类方法:

class Post
  ...
  def self.winner
    ...
  end
end

但如果你只使用Post.winner作为日程表,我更喜欢@xlembouras建议的rake任务。