Sending an email (see ticket #46) with Sendgrid take 1 to 2 sec each time. The user doesn't need to wait and the email can be sent asynchronously.
Must have
[ ] Sidekiq must be configured to work with ActiveJob
[ ] All emails should be delivered later through Sidekiq/ActiveJob
[ ] Plug it in Heroku
[ ] If you have it make it work in Docker
Todo
[ ] Configure sidekiq to work with active record (in dev) (see documentation lower)
[ ] For processing emails with sidekiq dont forget to tell sidekiq that you want to process the mailer queue (-q default -q mailers)
[ ] Email sent by devise token auth are sent with a deliver_now. To send them through sidekiq, define this in the User model:
def send_devise_notification(notification, *args)
devise_mailer.send(notification, self, *args).deliver_later
end
[ ] A worker and the main rails process doesn't share a SQL Transaction. So if you sent the emails in an after_create, you might have some fun and your worker might not find the invitation. Use after_commit instead (cf doc lower).
[ ] To test and NOT use the sidekiq queue add at the end of your rails_helper.rb:
ActiveJob::Base.queue_adapter = :test
[ ] When it's working in dev the fun part begin: Add Redis as an add-on to all of your heroku apps
[ ] Add a worker line in your profile to launch sidekiq
[ ] Each worker will connect to the DB and the number of connection is limited in a free heroku postgresql so limit the number of sidekiq workers to 10 (-c 10)
Why ?
Sending an email (see ticket #46) with Sendgrid take 1 to 2 sec each time. The user doesn't need to wait and the email can be sent asynchronously.
Must have
Todo
[ ] Configure sidekiq to work with active record (in dev) (see documentation lower)
[ ] For processing emails with sidekiq dont forget to tell sidekiq that you want to process the mailer queue (
-q default -q mailers
)[ ] Email sent by devise token auth are sent with a
deliver_now
. To send them through sidekiq, define this in theUser
model:[ ] A worker and the main rails process doesn't share a SQL Transaction. So if you sent the emails in an after_create, you might have some fun and your worker might not find the invitation. Use after_commit instead (cf doc lower).
[ ] To test and NOT use the sidekiq queue add at the end of your rails_helper.rb:
[ ] When it's working in dev the fun part begin: Add Redis as an add-on to all of your heroku apps
[ ] Add a
worker
line in your profile to launch sidekiq[ ] Each worker will connect to the DB and the number of connection is limited in a free heroku postgresql so limit the number of sidekiq workers to 10 (
-c 10
)[ ] Try your heroku config with
heroku local worker
(more info on this here: https://devcenter.heroku.com/articles/heroku-local)[ ] Deploy in staging and test it, then deploy in production.
Reading List