Ich habe mein Beispiel so weit wie möglich reduziert. In meiner Anwendung erstelle ich eine Dummy-Klasse und versuche, die Aufrufmethode in die Warteschlange zu stellen. Dies wird zur Datenbank hinzugefügt und mit delayed_jobs, die im Hintergrund ausgeführt werden, wird es aufgenommen und auf "locked" aktualisiert. Aber es beendet den Job nicht wirklich. Es bleibt nur im gesperrten Zustand.Warum wird nicht verzögerter Job Prozess in die Warteschlange eingereiht Job?
pry(main)> class DummyClass
pry(main)* def self.call
pry(main)* puts 'will this ever work?'
pry(main)* end
pry(main)* end
=> :call
pry(main)> DummyClass.delay.call
(0.2ms) BEGIN
SQL (0.3ms) INSERT INTO `delayed_jobs` (`created_at`, `handler`, `queue`, `run_at`, `updated_at`) VALUES ('2014-12-19 12:11:40.006107', '--- !ruby/object:Delayed::PerformableMethod\nobject: !ruby/class \'DummyClass\'\nmethod_name: :call\nargs: []\n', 'default', '2014-12-19 12:11:40.005811', '2014-12-19 12:11:40.006107')
(16.2ms) COMMIT
=> #<Delayed::Backend::ActiveRecord::Job:0x007fd0fdec0e20
id: 22,
priority: 0,
attempts: 0,
handler: "--- !ruby/object:Delayed::PerformableMethod\nobject: !ruby/class 'DummyClass'\nmethod_name: :call\nargs: []\n",
last_error: nil,
run_at: Fri, 19 Dec 2014 14:11:40 CAT +02:00,
locked_at: nil,
failed_at: nil,
locked_by: nil,
queue: "default",
created_at: Fri, 19 Dec 2014 14:11:40 CAT +02:00,
updated_at: Fri, 19 Dec 2014 14:11:40 CAT +02:00>
Sperrt die Aufgabe hier
SQL (0.8ms) UPDATE `delayed_jobs` SET `delayed_jobs`.`locked_at` = '2014-12-19 12:17:20.031925', `delayed_jobs`.`locked_by` = 'delayed_job host:Ryan-Mes-MacBook-Pro-2.local pid:60080' WHERE ((run_at <= '2014-12-19 12:17:20.031003' AND (locked_at IS NULL OR locked_at < '2014-12-19 12:12:20.031154') OR locked_by = 'delayed_job host:Ryan-Mes-MacBook-Pro-2.local pid:60080') AND failed_at IS NULL) ORDER BY priority ASC, run_at ASC LIMIT 1
Dann hängt er einfach. Ich verstehe nicht, warum so eine einfache Aufgabe nicht funktioniert.
Beachten Sie, dass diese Steuerkonsole auf meiner vorhandenen Rails-Anwendung ausgeführt wird. Es könnte ein Anwendungskonfigurationsproblem sein, aber ich konnte es nicht finden.
Irgendwelche Ideen? Ich kann versuchen, mehr Informationen zu geben, aber ich denke, das ist alles.
Der eigentliche Code verwende ich unter
module Events
class ForwardRequestToPulse
def self.call
puts 'will this ever work'
end
end
end
class MyTestController < ApplicationController
def index
Events::ForwardRequestToPulse.delay.call
end
end
Der Datensatz zur delayed_jobs Tabelle Fund hinzugefügt wird. Wenn ich bin/delayed_job run
ausführen, ist der Datensatz gesperrt, aber nicht verarbeitet.
Unten ist ein Bild des gesperrten Datensatz
Nur um es klar zu machen, haben Sie die Hintergrundverarbeitung gestartet? – Josnidhin
Ja. Ich habe versucht, eine Variation von bin/delayed_job zu rasen Jobs: Arbeit und andere. Alle scheinen zu beginnen, aber nicht zu Ende. Die Datenbank hängt nur mit dem ersten Job, der im gesperrten Zustand in die Warteschlange eingereiht wurde. –
Ok. Von dem, was ich weiß, wenn die Verarbeitung von delayed_job gestartet wird, beginnt ein neuer Prozess. Dieser neue Prozess hat möglicherweise keinen Zugriff auf die DummyClass, wie sie in der Programmiersprache definiert ist. Haben Sie versucht, einige Methoden in Ihren Modellen aufzurufen? – Josnidhin