I'm using DJ with ActiveJob. I thought I set it up correctly, but I'm not able to send mail with `deliver_later` (`deliver_now` works fine).
Here is the email delivery code:
# Before
NotificationMailer.failed_delivery(params).deliver_now
# After
NotificationMailer.failed_delivery(params).deliver_later
Here is the stack trace:
Completed 500 Internal Server Error in 21ms
ActiveJob::SerializationError - Unsupported argument type: ActionDispatch::Http::UploadedFile:
activejob (4.2.0) lib/active_job/arguments.rb:60:in `serialize_argument'
activejob (4.2.0) lib/active_job/arguments.rb:57:in `block in serialize_argument'
actionpack (4.2.0) lib/action_controller/metal/strong_parameters.rb:183:in `each_pair'
actionpack (4.2.0) lib/action_controller/metal/strong_parameters.rb:183:in `each_pair'
activejob (4.2.0) lib/active_job/arguments.rb:56:in `each_with_object'
activejob (4.2.0) lib/active_job/arguments.rb:56:in `serialize_argument'
activejob (4.2.0) lib/active_job/arguments.rb:31:in `block in serialize'
activejob (4.2.0) lib/active_job/arguments.rb:31:in `map'
activejob (4.2.0) lib/active_job/arguments.rb:31:in `serialize'
activejob (4.2.0) lib/active_job/core.rb:81:in `serialize_arguments'
activejob (4.2.0) lib/active_job/core.rb:68:in `serialize'
activejob (4.2.0) lib/active_job/queue_adapters/delayed_job_adapter.rb:18:in `enqueue'
activejob (4.2.0) lib/active_job/enqueuing.rb:71:in `block in enqueue'
...
My Procfile looks like:
web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
worker: bundle exec rake jobs:work
Delayed Job is configured as follows in `config/initializers/delayed_job_config.rb`:
# https://github.com/collectiveidea/delayed_job#gory-details
Delayed::Worker.destroy_failed_jobs = false
Delayed::Worker.max_attempts = 15
Delayed::Worker.max_run_time = 1.hour
Delayed::Worker.read_ahead = 10
Delayed::Worker.sleep_delay = 6
Delayed::Worker.delay_jobs = !Rails.env.test? # Disable DJ when testing.
# Silence DJ in development (so development.log doesn't get polluted).
if Rails.env.development?
module Delayed
module Backend
module ActiveRecord
class Job
class << self
alias_method :reserve_original, :reserve
def reserve(worker, max_run_time = Worker.max_run_time)
previous_level = ::ActiveRecord::Base.logger.level
::ActiveRecord::Base.logger.level = Logger::WARN if previous_level < Logger::WARN
value = reserve_original(worker, max_run_time)
::ActiveRecord::Base.logger.level = previous_level
value
end
end
end
end
end
end
end
My `config/application.rb` has the following line:
# Set ActiveJob's queueing backend to use Delayed Job.
config.active_job.queue_adapter = :delayed_job
Any help is appreciated.