Ich bin auf Schienen 4 mit Resque w/Redis.Verwenden einer Controller-Methode mit Resque-Hintergrundjob
Meine Frage: Wie kann ich eine Controller-Methode, die derzeit in meinem application_controller definiert ist, in meinem Hintergrundjob verwenden?
Hier ist die aktuelle Methode, die ich definiert haben:
def push_to_google(token, message)
if token.present?
gcm = GCM.new("843jf9384fj839f848j890fj3")
registration_ids = ["#{token}"] # an array of one or more client registration tokens
options = {data: {notification: "#{message}"}}
response = gcm.send(registration_ids, options)
end
end
die Ich mag würde in diesem Hintergrund Job in meinem delayed_notifications definiert verwenden:
class DelayedNotifications
@queue = :notifications_queue
def self.perform(registration_id, user_name)
push_to_google(registration_id, "New message from #{user_name}.")
end
end
Natürlich sind meine Jobs zur Zeit versagt mit diesem Fehler:
undefined method 'push_to_google' for DelayedNotifications:Class
Danke für die Hilfe im Voraus.
würde ich habe dies nicht in 'ApplicationHelper' sondern ein eigenes Modul irgendwo in 'lib /' statt. Ihre Herangehensweise scheint mir ziemlich gefährlich zu sein, da sie alle Methoden hinzufügt, die in 'ApplicationHelper' als Controller-Aktionen definiert sind. Aus diesem Grund würde ich die Methode als privat einbeziehen. – BoraMa
Danke für Ihren Kommentar, ich denke, ich werde diesen Ansatz verfolgen. Gibt es irgendwelche Vorteile, wenn ich mein Modul in das 'lib'-Verzeichnis gegenüber dem' helpers'-Verzeichnis setze? @BoraMa – Kathan
@Kathan Es gibt einen kleinen Unterschied. [Rails helpers] (http://api.rubyonrails.org/classes/ActionController/Helpers.html) (dh Module im 'app/helpers'-Verzeichnis) sind für das Verschieben komplexer Logik aus den Views gedacht (http: //mixandgo.com/blog/the-beginner-s-guide-to-rails-helpers), dh sie befassen sich in der Regel mit der Darstellung von Daten. Außerdem sind standardmäßig alle Helfer im Namespace der Ansicht enthalten (sie können automatisch aus Ansichten verwendet werden). Das Verzeichnis 'lib' wird für alle Supportmodule im Allgemeinen verwendet. Da Ihr Code nicht mit der Präsentation zu tun hat, würde ich ihn in 'lib' setzen. – BoraMa