我希望每分钟在controller.rb文件中运行一个特定的方法。我正在寻找使用随时随地的宝石铁路,但我有点困惑如何做到这一点。
目前在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中的文件)?
答案 0 :(得分: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
方法。
答案 1 :(得分:1)
我有同样的问题,我直接解决了,并没有在lib中添加任何东西,所以我想分享:
在你的情况下,你想要调用一个控制器动作,你所做的就是在模型方法中拥有所有的逻辑,这无论如何都是最佳实践。然后跑步者可以简单地调用模型方法:
every 1.minutes do
runner "Server.update_all_servers"
end
Server.update_all_servers必须是服务器模型中的方法,而不是控制器操作。