ruby-on-rails - Rails Whenever Gem 如何在 Controller.rb 文件中运行特定方法

标签 ruby-on-rails ruby cron whenever

我希望每分钟在我的 controller.rb 文件中运行一个特定的方法。我正在考虑将 whenever gem 用于 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 中的文件)?

最佳答案

您可以在/lib 中创建一个Server 类:

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

然后你可以在你的 Controller 中调用ServerUpdater.new(@servers).update_all

在您的 cron 作业中,您将调用 ServerUpdater.new(Server.all).update_all

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

关于ruby-on-rails - Rails Whenever Gem 如何在 Controller.rb 文件中运行特定方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12305767/

相关文章:

ruby - Jekyll - 将内容分成两列

ruby - 露营的路径构建方法

javascript - Cron Job 在 Cloudwatch Events 中从上午 8 点到下午 4.30 每分钟运行一次

从 cronjob 运行时,Python 找不到自定义安装的模块

ruby-on-rails - 使用 CanCan 指定拒绝访问的原因

ruby-on-rails - content_for head 标签不起作用(ruby on rails)

ruby-on-rails - 对数组进行分组并求和

php - 在 mysql/php 中每小时批量显示 100 个海量数据

ruby-on-rails - Mechanize 设置具有重复名称的字段

css - 将元素放在全屏 flexbox 的中心和右下角?