我希望每分钟在我的 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/