Gem如何在Controller.rb文件中运行特定方法

Rah*_*hul 3 ruby cron ruby-on-rails whenever

我希望每分钟在我的controller.rb文件中运行一个特定的方法.我正在寻找使用随时随地的宝石铁路,但我有点困惑如何做到这一点.

目前在schedule.rb我有:

every 1.minutes do 
runner "Server.update_all_servers"
end
Run Code Online (Sandbox Code Playgroud)

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

Rob*_*bin 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
Run Code Online (Sandbox Code Playgroud)

然后你可以打电话给ServerUpdater.new(@servers).update_all你的控制器.

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

你需要一个update_info包含逻辑的模型中的方法.