Ich arbeite an dem Aufbau einer Rails-basierten Internet-of-Things-Plattform, wo bestimmte Geräte zu bestimmten vorgegebenen Zeiten manipuliert werden. Ich habe jedoch Schwierigkeiten, Aktionen zu bestimmten Zeiten auszuführen, da die integrierte Zeitplanungsbibliothek von Heroku nur Callbacks in konstanten Intervallen zu unterstützen scheint. Mein Server muss zu beliebigen Zeiten Anrufe tätigen, ohne dass es zu einer späteren Wiederholung kommt. Gibt es noch andere Edelsteine oder Methoden in Rails, die diese Funktion erfüllen können?So führen Sie eine Aktion zu einer bestimmten Zeit aus - Rails Heroku Server?
1
A
Antwort
0
Sie können delyed job gem. Nutzen Sie das Feld run_at
, um Ihre Aufgabe zu bestimmten Zeiten auszuführen.
Hier ist ein Beispiel
class LongTasks
def send_mailer
# Some other code
end
handle_asynchronously :send_mailer, :priority => 20
def in_the_future
# Some other code
end
# 5.minutes.from_now will be evaluated when in_the_future is called
handle_asynchronously :in_the_future, :run_at => Proc.new { 5.minutes.from_now }
def self.when_to_run
2.hours.from_now
end
class << self
def call_a_class_method
# Some other code
end
handle_asynchronously :call_a_class_method, :run_at => Proc.new { when_to_run }
end
attr_reader :how_important
def call_an_instance_method
# Some other code
end
handle_asynchronously :call_an_instance_method, :priority => Proc.new {|i| i.how_important }
end