Skip to content

Commit cb0aa16

Browse files
authored
[refactor] Migrate from Sidekiq workers to ActiveJob jobs (#153)
* [refactor] Migrate from Sidekiq workers to ActiveJob jobs Fixes #26 * Clean up mailer exception handling
1 parent d22f9aa commit cb0aa16

22 files changed

+195
-206
lines changed

Guardfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ guard :minitest, all_on_start: false, all_after_pass: false, spring: "bin/rails
55
watch(%r{^app/mailers/(.+)\.rb$}) { |m| "test/controllers/#{m[1]}_test.rb" }
66
watch(%r{^app/controllers/(.+)\.rb$}) { |m| "test/controllers/#{m[1]}_test.rb" }
77
watch(%r{^app/views/(.+)\/.+$}) { |m| "test/controllers/#{m[1]}_controller_test.rb" }
8-
watch(%r{^app/workers/(.+)\.rb$}) { |m| "test/workers/#{m[1]}_test.rb" }
8+
watch(%r{^app/jobs/(.+)\.rb$}) { |m| "test/jobs/#{m[1]}_test.rb" }
99
watch(%r{^app/views/layouts/.+$}) { "test/controllers" }
1010
watch(%r{^app/views/.+\.rb$}) { "test/integration" }
1111
watch(%r{^test/.+_test.rb$})

app/controllers/manage/messages_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ def deliver
5252
return redirect_to manage_messages_path
5353
end
5454
@message.update_attribute(:queued_at, Time.now)
55-
BulkMessageWorker.perform_async(@message.id)
55+
BulkMessageJob.perform_later(@message)
5656
flash[:notice] = "Message queued for delivery"
5757
redirect_to manage_message_path(@message)
5858
end

app/workers/bulk_message_worker.rb renamed to app/jobs/bulk_message_job.rb

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
1-
class BulkMessageWorker
2-
include Sidekiq::Worker
1+
class BulkMessageJob < ApplicationJob
2+
queue_as :default
33

4-
def perform(message_id)
5-
message = Message.find(message_id)
6-
return unless message.present? && message.status == "queued"
4+
def perform(message)
5+
return unless message.status == "queued"
76

87
message.update_attribute(:started_at, Time.now)
98

109
recipients = self.class.build_recipients(message.recipients)
1110

1211
recipients.each do |recipient|
13-
Mailer.delay.bulk_message_email(message.id, recipient)
12+
Mailer.bulk_message_email(message.id, recipient).deliver_later
1413
end
1514

1615
message.update_attribute(:delivered_at, Time.now)

app/mailers/mailer.rb

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,24 +23,18 @@ def incomplete_reminder_email(user_id)
2323
Message.queue_for_trigger("user.24hr_incomplete_application", @user.id)
2424
end
2525

26+
rescue_from SparkPostRails::DeliveryException do |e|
27+
error_codes_to_not_retry = [
28+
"1902" # Generation rejection
29+
]
30+
raise e unless e.blank? || error_codes_to_not_retry.include?(e.service_code)
31+
end
32+
2633
private
2734

2835
def pretty_email(name, email)
2936
return email if name.blank?
3037

3138
"\"#{name}\" <#{email}>"
3239
end
33-
34-
def mail_questionnaire(subject, sparkpost_data = {})
35-
mail(
36-
to: pretty_email(@questionnaire.full_name, @questionnaire.user.email),
37-
subject: subject,
38-
sparkpost_data: sparkpost_data
39-
)
40-
rescue SparkPostRails::DeliveryException => e
41-
error_code_to_not_retry = [
42-
"1902" # Generation rejection
43-
]
44-
raise e unless e.blank? || error_code_to_not_retry.include?(e.service_code)
45-
end
4640
end

app/models/message.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ def self.for_trigger(trigger)
171171
end
172172

173173
def self.queue_for_trigger(trigger, user_id)
174-
for_trigger(trigger).map { |message| Mailer.delay.bulk_message_email(message.id, user_id) }
174+
for_trigger(trigger).map { |message| Mailer.bulk_message_email(message.id, user_id).deliver_later }
175175
end
176176

177177
def self.bulk

app/models/user.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def send_devise_notification(notification, *args)
3232

3333
def queue_reminder_email
3434
return if reminder_sent_at
35-
Mailer.delay_for(1.day).incomplete_reminder_email(id)
35+
Mailer.incomplete_reminder_email(id).deliver_later(wait: 1.day)
3636
update_attribute(:reminder_sent_at, Time.now)
3737
end
3838

app/views/manage/messages/show.html.haml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
:ruby
22
begin
3-
recipient_count = pluralize(BulkMessageWorker.build_recipients(@message.recipients).count, "recipient")
3+
recipient_count = pluralize(BulkMessageJob.build_recipients(@message.recipients).count, "recipient")
44
rescue => recipient_error
55
end
66

config/environments/development.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
config.active_storage.service = :local
3232

3333
# Don't care if the mailer can't send.
34-
config.action_mailer.raise_delivery_errors = false
34+
config.action_mailer.raise_delivery_errors = true
3535

3636
# MailCatcher
3737
config.action_mailer.delivery_method = :smtp

config/environments/production.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@
6767

6868
# Ignore bad email addresses and do not raise email delivery errors.
6969
# Set this to true and configure the email server for immediate delivery to raise delivery errors.
70-
# config.action_mailer.raise_delivery_errors = false
70+
config.action_mailer.raise_delivery_errors = true
7171

7272
# Enable locale fallbacks for I18n (makes lookups for any locale fall back to
7373
# the I18n.default_locale when a translation cannot be found).

config/initializers/devise.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
# Configure the e-mail address which will be shown in Devise::Mailer,
1414
# note that it will be overwritten if you use your own mailer class
1515
# with default "from" parameter.
16-
config.mailer_sender = -> { HackathonConfig['email_from'] }
16+
config.mailer_sender = ->(_) { HackathonConfig['email_from'] }
1717

1818
# Configure the class responsible to send e-mails.
1919
# config.mailer = 'Devise::Mailer'

0 commit comments

Comments
 (0)