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.