method
enqueue_delivery
v6.1.3.1 -
Show latest stable
- Class:
ActionMailer::MessageDelivery
enqueue_delivery(delivery_method, options = {})private
No documentation available.
# File actionmailer/lib/action_mailer/message_delivery.rb, line 132
def enqueue_delivery(delivery_method, options = {})
if processed?
::Kernel.raise "You've accessed the message before asking to " "deliver it later, so you may have made local changes that would " "be silently lost if we enqueued a job to deliver it. Why? Only " "the mailer method *arguments* are passed with the delivery job! " "Do not access the message in any way if you mean to deliver it " "later. Workarounds: 1. don't touch the message before calling " "#deliver_later, 2. only touch the message *within your mailer " "method*, or 3. use a custom Active Job instead of #deliver_later."
else
job = @mailer_class.delivery_job
if use_new_args?(job)
job.set(options).perform_later(
@mailer_class.name, @action.to_s, delivery_method.to_s, args: @args)
elsif job <= DeliveryJob
job.set(options).perform_later(
@mailer_class.name, @action.to_s, delivery_method.to_s, *@args)
else
ActiveSupport::Deprecation.warn(<<~EOM)
In Rails 6.2, Action Mailer will pass the mail arguments inside the `:args` keyword argument.
The `perform` method of the #{job} needs to change and forward the mail arguments
from the `args` keyword argument.
The `perform` method should now look like:
`def perform(mailer, mail_method, delivery, args:)`
EOM
job.set(options).perform_later(
@mailer_class.name, @action.to_s, delivery_method.to_s, *@args)
end
end
end