chore: Use find_each instead of .all.each (#6975)

- Enable the rubocop Rails/FindEach
- Replace the .all.each with .find_each

This should let us avoid potential memory usage.
Motivation from the speedshop newsletter by Nate Berkopec

ref: https://www.rubyinrails.com/2017/11/16/use-find-each-instead-of-all-each-in-rails/
ref: https://linear.app/chatwoot/issue/CW-1480/chore-run-all-sidekiq-jobs-async
This commit is contained in:
Sojan Jose
2023-04-25 09:32:35 +05:30
committed by GitHub
parent b529baa5eb
commit cf91e9eb58
9 changed files with 12 additions and 11 deletions

View File

@@ -2,7 +2,7 @@ class Account::ConversationsResolutionSchedulerJob < ApplicationJob
queue_as :scheduled_jobs
def perform
Account.where.not(auto_resolve_duration: nil).all.each do |account|
Account.where.not(auto_resolve_duration: nil).all.find_each(batch_size: 100) do |account|
Conversations::ResolutionJob.perform_later(account: account)
end
end

View File

@@ -2,6 +2,6 @@ class Conversations::ReopenSnoozedConversationsJob < ApplicationJob
queue_as :low
def perform
Conversation.where(status: :snoozed).where(snoozed_until: 3.days.ago..Time.current).all.each(&:open!)
Conversation.where(status: :snoozed).where(snoozed_until: 3.days.ago..Time.current).all.find_each(batch_size: 100, &:open!)
end
end

View File

@@ -2,7 +2,7 @@ class Inboxes::FetchImapEmailInboxesJob < ApplicationJob
queue_as :low
def perform
Inbox.where(channel_type: 'Channel::Email').all.each do |inbox|
Inbox.where(channel_type: 'Channel::Email').all.find_each(batch_size: 100) do |inbox|
::Inboxes::FetchImapEmailsJob.perform_later(inbox.channel) if inbox.channel.imap_enabled
end
end

View File

@@ -6,7 +6,7 @@ class Migration::UpdateFirstResponseTimeInReportingEventsJob < ApplicationJob
def perform(account)
get_conversations_with_bot_handoffs(account)
account.reporting_events.where(name: 'first_response').each do |event|
account.reporting_events.where(name: 'first_response').find_each do |event|
conversation = event.conversation
# if the conversation has a bot handoff event, we don't need to update the response_time

View File

@@ -3,7 +3,8 @@ class TriggerScheduledItemsJob < ApplicationJob
def perform
# trigger the scheduled campaign jobs
Campaign.where(campaign_type: :one_off, campaign_status: :active).where(scheduled_at: 3.days.ago..Time.current).all.each do |campaign|
Campaign.where(campaign_type: :one_off,
campaign_status: :active).where(scheduled_at: 3.days.ago..Time.current).all.find_each(batch_size: 100) do |campaign|
Campaigns::TriggerOneoffCampaignJob.perform_later(campaign)
end