Ich habe versucht, herauszufinden, wie verzögerte E-Mail mit delayed_job mit Schienen 3 zu senden. Ich habe so ziemlich jede Kombination von realisierbaren Möglichkeiten ausprobiert - Ich kann die Mail im Hintergrund laufen lassen, ich kann es einfach nicht bekommen, um das Senden auf eine zukünftige Zeit zu verzögern. Die delayed_jobs Tabelle in der db löscht die Aufgaben, sagt das Protokoll ‚geschickt‘, der delayed_job Task-Prozessor abholt die Aufgabe & sagt ohne Fehler gesendet ... aber die E-Mail ist entweder:Rails 3/delayed_job - Gesucht: Grundlegendes Beispiel für verzögerte E-Mail
- sofort gesendet oder
- kommt einfach nicht
wenn ich versuche, in der Zukunft zu senden.
Wenn jemand ein bloßes Beispiel für eine Schiene 3 delayed_job anbieten könnte, die in der Zukunft Mail sendet, würde ich wirklich dankbar sein. Ich bin mir sicher, dass viele Leute das tun, also vermute ich, dass ich etwas Offensichtliches vermisse. Ein (unzähliger) Kombinationen Ich habe unten versucht:
delayed_job: 2.1.2 Schienen: 3.0.3 Action: 3.0.3
Controller:
class TestmailerController < ApplicationController
def index
Testmailer.delay.test_mail
end
end
Mailer:
class Testmailer < ActionMailer::Base
def test_mail
mail(:to => '([email protected]', :from => '(removedforprivacy)@gmail.com', :subject => 'Testing Delayed Job', :content_type => 'text/plain').deliver
end
handle_asynchronously :test_mail, :run_at => Proc.new { 2.minutes.from_now }
end
relevant Mail-Teil von config/Umgebungen/development.rb:
# Don't care if the mailer can't send
config.action_mailer.raise_delivery_errors = true
# Print deprecation notices to the Rails logger
config.active_support.deprecation = :log
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => "gmail.com",
:user_name => "(removedforprivacy)",
:password => "(removedforprivacy)",
:authentication => "plain",
:enable_starttls_auto => true
}
Job-Befehl:
rake jobs:work
wissen Sie, wie Sie dies ohne die Verzögerungsmethode erreichen. Ich möchte die Methode handle_async ... verwenden. Ich mag es, eine Methode in allen aufgerufenen Orten verzögern zu können, anstatt alle Anrufer zu ändern. – baash05