rails create ruby-on-rails ruby cron whenever

ruby on rails - create - Rails Whenever Gem Cómo ejecutar un método específico en el archivo Controller.rb



whenever rails heroku (2)

Puede crear una clase de Server en /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

Luego puede llamar a ServerUpdater.new(@servers).update_all en su controlador.

En su trabajo cron, debe llamar a ServerUpdater.new(Server.all).update_all

Y necesitaría un método update_info en su modelo que contendría la lógica.

Estoy buscando ejecutar un método específico dentro de mi archivo controller.rb cada minuto. Estoy buscando el uso de la gema siempre para los rieles, pero estoy un poco confundido sobre cómo hacer esto.

Actualmente en schedule.rb tengo:

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

No estoy seguro de lo que hace el comando corredor. ¿Podría alguien explicar qué hace exactamente este comando? Desde mi entender, llama a Model.ModelMethod pero necesito llamar a un método en application_controller.rb llamado update_all_servers (). ¿Es posible hacer esto? ¿O tendría que mover lo que esté dentro de mi application_controller.rb a un archivo de modelo (como el que se encuentra en /models/server.rb)?


Tenía la misma pregunta y la resolví directamente y no tuve que agregar nada en lib, así que quería compartir:

En su caso, usted quiere llamar a una acción de controlador, todo lo que hace es tener toda su lógica en el método del modelo y esa es la mejor práctica de todos modos. El corredor puede simplemente llamar al método modelo:

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

Server.update_all_servers tiene que ser un método en su modelo de Servidor y no una acción de controlador.