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

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

目前在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 

然后,您可以在控制器中调用ServerUpdater.new(@servers).update_all

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

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

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

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

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

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