2016-08-09 60 views
1

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?

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