メソッドを5分ごとに実行し、Ruby(cron)の場合はいつでも実装します。しかし、動作しません。私のメソッドにアクセスできないと思います。実行したいメソッドはMyClass.MyMethod
でアクセスできるように、このメソッドを静的にする必要があると思いますが、正しい構文が見つからないか、間違った場所を探している可能性があります。
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
静的メソッドを宣言するには、次のように記述します...
def self.checkPings
# A static method
end
...または...
class Myclass extend self
def checkPings
# Its static method
end
end
次のようにRubyで静的メソッドを使用できます。
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"
また、メソッドに間違った命名規則を使用していることに注意してください。そのはず check_pings
代わりに、これはコードが機能するかどうかに影響を与えません。それは単なるRubyスタイルです。
からコードを変更
class MyModel
def checkPings
end
end
に
class MyModel
def self.checkPings
end
end
メソッド名に自己追加されていることに注意してください。
def checkPings
はMyModelクラスのインスタンスメソッドであり、def self.checkPings
はクラスメソッドです。
クラス全体に対してself
を拡張する代わりに、selfから拡張するブロックを作成し、内部で静的メソッドを定義できます。
あなたはこのようなことをするでしょう:
class << self
#define static methods here
end
したがって、あなたの例では、このようなことをします:
class Ping
class << self
def checkPings
#do you ping code here
# checkPings is a static method
end
end
end
次のように呼び出すことができます:Ping.checkPings