Ich habe eine Rails App, in der ich delayed_job verwende. Ich möchte erkennen, ob ich in einem delayed_job-Prozess bin oder nicht; etwas wiePrüfe ob ich in einem delayed_job Prozess bin oder nicht
if in_delayed_job?
# do something only if it is a delayed_job process...
else
# do something only if it is not a delayed_job process...
end
Aber ich kann nicht herausfinden, wie. Dies ist, was ich verwende jetzt:
IN_DELAYED_JOB = begin
basename = File.basename $0
arguments = $*
rake_args_regex = /\Ajobs:/
(basename == 'delayed_job') ||
(basename == 'rake' && arguments.find{ |v| v =~ rake_args_regex })
end
Eine andere Lösung ist, wie @MrDanA sagte:
$ DELAYED_JOB=true script/delayed_job start
# And in the app:
IN_DELAYED_JOB = ENV['DELAYED_JOB'].present?
aber sie sind IMHO schwache Lösungen. Kann jemand eine bessere Lösung vorschlagen?
Ist das eine Methode? Was ist mit dem Senden eines Flags, um anzuzeigen, ob der Job von verzögertem Job aufgerufen wird oder nicht. Es kann einfach auf "false" gesetzt werden und nur dann gesetzt werden, wenn es von einem verzögerten Job aus aufgerufen wird. Schnelle und einfache Lösung, wenn Sie nichts anderes finden können. – MrDanA
Ja, das ist eine andere Lösung (ich denke du meinst "DELAYED_JOB = true script/delayed_job start"), aber ich denke es ist auch eine schwache Lösung, weil ich daran denken muss, die Variable zu setzen oder zu deaktivieren, wenn ich die App mit delayed_job oder starte nicht – mdesantis
Wird diese Methode automatisch ausgeführt, wenn der verzögerte Job gestartet wurde? Ich nahm an, dass du stattdessen so etwas machst: 'user.delay.send_email' irgendwo in deinem Code. Dann könnten Sie diese Zeile in 'user.delay.send_email (true)' ändern, wobei '' 'bedeutet, dass es als Teil eines verzögerten Jobs aufgerufen wird. – MrDanA