From eb3efad0d655421d9dbe423891147c9511037394 Mon Sep 17 00:00:00 2001 From: rsmokeUM Date: Wed, 26 Mar 2025 10:51:33 -0400 Subject: [PATCH 1/5] Remove problematic observer from ActionMailer initializer to prevent recursion issues during email delivery. This change enhances the stability of the email delivery process while maintaining existing functionality. --- config/initializers/action_mailer.rb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/config/initializers/action_mailer.rb b/config/initializers/action_mailer.rb index 67a821d4..aa6992b4 100644 --- a/config/initializers/action_mailer.rb +++ b/config/initializers/action_mailer.rb @@ -15,9 +15,10 @@ def notify_delivered # Hook into the delivery process self.register_observer(-> (message) { message.delivery_method.settings[:return_response] = true }) self.register_interceptor(-> (message) { message }) - self.register_observer(-> (message) { - message.deliver_later unless Rails.env.test? - }) + # Remove problematic observer that causes recursion + # self.register_observer(-> (message) { + # message.deliver_later unless Rails.env.test? + # }) class << self attr_accessor :delivery_notification_method From 4d60b4aec513636168511badd8c6a1abd387367b Mon Sep 17 00:00:00 2001 From: rsmokeUM Date: Wed, 26 Mar 2025 11:11:59 -0400 Subject: [PATCH 2/5] Mount LetterOpenerWeb in staging environment for email previewing - Add configuration to enable LetterOpenerWeb for viewing emails in the staging environment. - This change facilitates easier email testing and debugging during the staging phase, enhancing development efficiency. --- config/environments/staging.rb | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/config/environments/staging.rb b/config/environments/staging.rb index b86d6913..0ebf984b 100644 --- a/config/environments/staging.rb +++ b/config/environments/staging.rb @@ -68,6 +68,13 @@ config.active_job.queue_adapter = :sidekiq config.active_job.queue_name_prefix = 'lsa_evaluate_staging' + # Mount letter_opener_web for viewing emails in staging + config.after_initialize do + Rails.application.routes.prepend do + mount LetterOpenerWeb::Engine, at: "/letter_opener" if Rails.env.staging? + end + end + # Do not dump schema after migrations. config.active_record.dump_schema_after_migration = false end From 95686dfecced12ed419707f7d9490c37a8cda362 Mon Sep 17 00:00:00 2001 From: rsmokeUM Date: Wed, 26 Mar 2025 11:12:12 -0400 Subject: [PATCH 3/5] Remove commented-out observers and interceptors from ActionMailer initializer to streamline email delivery configuration. This change enhances clarity and prevents potential confusion in the codebase. --- config/initializers/action_mailer.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/config/initializers/action_mailer.rb b/config/initializers/action_mailer.rb index aa6992b4..77ee2e8c 100644 --- a/config/initializers/action_mailer.rb +++ b/config/initializers/action_mailer.rb @@ -13,8 +13,9 @@ def notify_delivered end # Hook into the delivery process - self.register_observer(-> (message) { message.delivery_method.settings[:return_response] = true }) - self.register_interceptor(-> (message) { message }) + # Remove problematic observer and interceptor + # self.register_observer(-> (message) { message.delivery_method.settings[:return_response] = true }) + # self.register_interceptor(-> (message) { message }) # Remove problematic observer that causes recursion # self.register_observer(-> (message) { # message.deliver_later unless Rails.env.test? From c9c987a894f7be240ceba1e4b57e641c7cb6ab4d Mon Sep 17 00:00:00 2001 From: rsmokeUM Date: Wed, 26 Mar 2025 11:12:21 -0400 Subject: [PATCH 4/5] Add LetterOpenerWeb configuration for Sidekiq in staging environment - Introduce a new initializer to ensure ActionMailer delivery settings are accessible in Sidekiq threads when using LetterOpenerWeb. - This change enhances email testing capabilities during the staging phase, improving the development workflow. --- config/initializers/letter_opener_sidekiq.rb | 21 ++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 config/initializers/letter_opener_sidekiq.rb diff --git a/config/initializers/letter_opener_sidekiq.rb b/config/initializers/letter_opener_sidekiq.rb new file mode 100644 index 00000000..bc987821 --- /dev/null +++ b/config/initializers/letter_opener_sidekiq.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +# Special configuration for letter_opener with Sidekiq in staging +if Rails.env.staging? + require 'letter_opener_web' + + # Ensure delivery_method settings are accessible in Sidekiq threads + Sidekiq.configure_server do |config| + config.client_middleware do |chain| + chain.add(Class.new do + def call(worker_class, job, queue, redis_pool) + if worker_class == 'ActionMailer::MailDeliveryJob' && Rails.application.config.action_mailer.delivery_method == :letter_opener_web + # Ensure ActionMailer's settings are correctly set in the Sidekiq context + ActionMailer::Base.delivery_method = :letter_opener_web + end + yield + end + end) + end + end +end From 6014cc1ff38e1608a781930a079a1c83674b553f Mon Sep 17 00:00:00 2001 From: rsmokeUM Date: Wed, 26 Mar 2025 11:23:30 -0400 Subject: [PATCH 5/5] Remove LetterOpenerWeb configuration from staging environment - Eliminate the commented-out code for mounting LetterOpenerWeb, streamlining the staging environment configuration. - This change enhances clarity and reduces potential confusion regarding email previewing in the staging setup. --- config/environments/staging.rb | 7 ------- 1 file changed, 7 deletions(-) diff --git a/config/environments/staging.rb b/config/environments/staging.rb index 0ebf984b..b86d6913 100644 --- a/config/environments/staging.rb +++ b/config/environments/staging.rb @@ -68,13 +68,6 @@ config.active_job.queue_adapter = :sidekiq config.active_job.queue_name_prefix = 'lsa_evaluate_staging' - # Mount letter_opener_web for viewing emails in staging - config.after_initialize do - Rails.application.routes.prepend do - mount LetterOpenerWeb::Engine, at: "/letter_opener" if Rails.env.staging? - end - end - # Do not dump schema after migrations. config.active_record.dump_schema_after_migration = false end