Rufus-Scheduler und delayed_job auf Heroku: Warum einen Worker-Dyno verwenden?

Ich entwickle eine Rails 3.2.16-App und stelle sie auf einem Heroku-Dev-Account mit einem kostenlosen Web-Dyno und keinen Worker-Dynos bereit. Ich versuche festzustellen, ob ein (bezahlter) Arbeiterprüfstand wirklich benötigt wird.

Die App verschickt verschiedene E-Mails. Ich benutze delayed_job_active_record, um diese in die Warteschlange zu stellen und sie zu versenden.

Ich muss auch jede Minute eine Benachrichtigungsanzahl überprüfen. Dafür benutze ich Rufus-Scheduler.

rufus-scheduler scheint in der Lage zu sein, eine Hintergrundaufgabe / einen Thread auszuführeninnerhalb ein Heroku-Webdyno.

Andererseits zeigt alles, was ich auf delayed_job finden kann, dass es einen separaten Arbeitsprozess erfordert. Warum? Warum kann delayed_job nicht dasselbe tun, wenn rufus-scheduler einen Daemon innerhalb eines Web-Dynos ausführen kann?

Ich habe Folgendes getestet, um meine minutengenaue Aufgabe auszuführenund delayed_jobs abarbeiten, und es scheint innerhalb des Heroku-Webdynos zu funktionieren:

config / initializers / rufus-scheduler.rb

require 'rufus-scheduler'
require 'delayed/command'

s = Rufus::Scheduler.singleton
s.every '1m', :overlap => false do # Every minute
  Rails.logger.info ">> #{Time.now}:  rufus-scheduler task started"
  # Check for pending notifications and queue to delayed_job
  User.send_pending_notifications
  # work off delayed_jobs without a separate worker process
  Delayed::Worker.new.work_off  
end

Das scheint so offensichtlich, dass ich mich frage, ob ich etwas verpasse? Ist dies eine akzeptable Methode, um die Warteschlange delayed_job ohne die zusätzliche Komplexität und die Kosten eines separaten Arbeitsprozesses zu handhaben?

Aktualisieren

Wie @jmettraux hervorhebt, wird Heroku nach einer Stunde einen inaktiven Webdyno inaktivieren. Ich habe es noch nicht eingerichtet, aber nehmen wir an, dass ich eine der verschiedenen Keep-Alive-Methoden verwende, um zu verhindern, dass es schläft:Einfache Möglichkeit, Heroku Leerlauf zu verhindern?.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage