diff --git a/app/models/member.rb b/app/models/member.rb index 8b04518..de302f6 100644 --- a/app/models/member.rb +++ b/app/models/member.rb @@ -104,8 +104,12 @@ class Member < ApplicationRecord end def self.regenerate_all_notifications - Member.all.each do |member| - member.regenerate_notifications + ActiveRecord::Base.transaction do + ActiveRecord::Base.connection.execute('LOCK members IN ACCESS EXCLUSIVE MODE') + + Member.all.each do |member| + member.regenerate_notifications + end end end end diff --git a/app/models/notification.rb b/app/models/notification.rb index 21f9844..63587eb 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -4,8 +4,12 @@ class Notification < ApplicationRecord scope :scheduled_for_today, ->() { where(status: 'scheduled', to_be_sent_on: Date.today) } def self.send_scheduled_for_today - scheduled_for_today.each do |n| - n.deliver! + ActiveRecord::Base.transaction do + ActiveRecord::Base.connection.execute('LOCK members IN ACCESS EXCLUSIVE MODE') + + scheduled_for_today.each do |n| + n.deliver! + end end end