我可以从下面发布的控制器安排索引方法吗?如果是这样,我将如何做到这一点?
class WelcomeController < ApplicationController
def index
if Number.find(1)
@number = Number.first
@number.value += 1
@number.save
else
@number = Number.new
@number.value = 0
end
end
end
答案 0 :(得分:2)
所以你似乎有一个数字模型。第一步是将逻辑从控制器移动到模型:
class Number
def self.increment
n = nil
if Number.find(1)
n = Number.first
n.value += 1
n.save
else
n = Number.new
n.value = 0
end
n
end
end
然后您的控制器变为
class WelcomeController < ApplicationController
def index
@number = Number.increment
end
end
然后也可以从调度程序调用此“增量”类方法。喜欢在:
# file:
# config/initializers/scheduler.rb
require 'rufus-scheduler'
# Let's use the rufus-scheduler singleton
#
s = Rufus::Scheduler.singleton
# Stupid recurrent task...
#
s.every '10m' do
Number.increment
end
现在,如果这个答案也超出了你的想法,请考虑注册Rails开发人员课程。请意识到有人在这里帮助你,而不是免费完成你的工作。
答案 1 :(得分:0)
首先需要初始化一个rufus-scheduler实例。这通常在Rails初始化程序中完成:
# config/initializers/scheduler.rb
require 'rufus-scheduler'
# Let's use the rufus-scheduler singleton
#
s = Rufus::Scheduler.singleton
# Stupid recurrent task...
#
s.every '1m' do
Rails.logger.info "hello, it's #{Time.now}"
end
然后,您的控制器可以使用rufus-scheduler实例,如:
class ScheController < ApplicationController
def index
job_id =
Rufus::Scheduler.singleton.in '5s' do
Rails.logger.info "time flies, it's now #{Time.now}"
end
render :text => "scheduled job #{job_id}"
end
end
这适用于Webrick和Thin,但需要使用Passenger或Unicorn进行一些调整(防止多个调度程序和/或防止初始rufus-scheduler线程消失)。