Je veux qu'une méthode soit exécutée toutes les 5 minutes, je l'ai implémentée à chaque fois pour Ruby (cron). Mais cela ne fonctionne pas. Je pense que ma méthode n'est pas accessible. La méthode que je veux exécuter est situé dans une classe. Je pense que je dois rendre cette méthode statique pour pouvoir y accéder avec MyClass.MyMethod
. Mais je ne trouve pas la bonne syntaxe ou je cherche peut-être au mauvais endroit.
Schedule.rb
every 5.minutes do
runner "Ping.checkPings"
end
Ping.rb
def checkPings
gate = Net::Ping::External.new("10.10.1.1")
@monitor_ping = Ping.new()
if gate.ping?
MonitorPing.WAN = true
else
MonitorPing.WAN = false
end
@monitor_ping.save
end
Pour déclarer une méthode statique, écrivez ...
def self.checkPings
# A static method
end
... ou ...
class Myclass extend self
def checkPings
# Its static method
end
end
Vous pouvez utiliser des méthodes statiques dans Ruby comme ceci:
class MyModel
def self.do_something
puts "this is a static method"
end
end
MyModel.do_something # => "this is a static method"
MyModel::do_something # => "this is a static method"
Notez également que vous utilisez une mauvaise convention de dénomination pour votre méthode. CA devrait etre check_pings
à la place, mais cela n'affecte pas si votre code fonctionne ou non, c'est juste le style Ruby.
Changez votre code de
class MyModel
def checkPings
end
end
à
class MyModel
def self.checkPings
end
end
Notez qu'il est ajouté automatiquement au nom de la méthode.
def checkPings
est une méthode d'instance pour la classe MyModel alors que def self.checkPings
est une méthode de classe.
Au lieu d'étendre self
pour toute la classe, vous pouvez créer un bloc qui s'étend de soi et définir vos méthodes statiques à l'intérieur.
vous feriez quelque chose comme ceci:
class << self
#define static methods here
end
Donc, dans votre exemple, vous feriez quelque chose comme ceci:
class Ping
class << self
def checkPings
#do you ping code here
# checkPings is a static method
end
end
end
et vous pouvez l'appeler comme suit: Ping.checkPings