3

我希望每分钟在我的 controller.rb 文件中运行一个特定的方法。我正在考虑使用when gem for rails,但我对如何做到这一点有点困惑。

目前在 schedule.rb 我有:

every 1.minutes do 
runner "Server.update_all_servers"
end

我不确定 runner 命令到底是做什么的。有人能解释一下这个命令到底是做什么的吗?据我了解,它调用了 Model.ModelMethod,但我需要在 application_controller.rb 中调用一个名为 update_all_servers() 的方法。是否有可能做到这一点?还是我必须将 application_controller.rb 中的任何内容移动到模型文件(例如位于 /models/server.rb 中的那个)?

4

2 回答 2

5

您可以在以下位置创建一个Server/lib

class ServerUpdater
    attr_accessor :servers

    def initialize(servers = nil)
        @servers = servers || Server.all
    end

    def update_all
        servers.find_each { |server| server.update_info }
    end
end

然后你可以调用ServerUpdater.new(@servers).update_all你的控制器。

在你的 cron 工作中,你会打电话给ServerUpdater.new(Server.all).update_all

而且您需要update_info在模型中包含一个包含逻辑的方法。

于 2012-09-06T18:17:22.540 回答
1

我有同样的问题,我直接解决了,不需要在 lib 中添加任何东西,所以我想分享:

在您想要调用控制器操作的情况下,您所做的就是在模型方法中包含所有逻辑,无论如何这是最佳实践。然后跑步者可以简单地调用模型方法:

every 1.minutes do 
  runner "Server.update_all_servers"
end

Server.update_all_servers 必须是 Server 模型中的方法,而不是控制器操作。

于 2013-04-12T16:48:57.350 回答