From 91b399196ac8b409ec48a4c75ddac681c8b23b5a Mon Sep 17 00:00:00 2001 From: Brenda Wallace Date: Sat, 14 Dec 2019 14:03:01 +1300 Subject: [PATCH 1/4] Cache some heavy queries on models --- app/models/concerns/photo_capable.rb | 4 +++- app/models/concerns/predict_planting.rb | 18 ++++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/app/models/concerns/photo_capable.rb b/app/models/concerns/photo_capable.rb index 9cb440bd7..f96258f87 100644 --- a/app/models/concerns/photo_capable.rb +++ b/app/models/concerns/photo_capable.rb @@ -8,7 +8,9 @@ module PhotoCapable scope :has_photos, -> { includes(:photos).where.not(photos: { id: nil }) } def default_photo - most_liked_photo + Rails.cache.fetch("#{cache_key_with_version}/default_photo", expires_in: 8.hours) do + most_liked_photo + end end def most_liked_photo diff --git a/app/models/concerns/predict_planting.rb b/app/models/concerns/predict_planting.rb index e02fe5e5b..b43a70149 100644 --- a/app/models/concerns/predict_planting.rb +++ b/app/models/concerns/predict_planting.rb @@ -42,14 +42,16 @@ module PredictPlanting end def percentage_grown - if finished? - 100 - elsif !planted? - 0 - elsif crop.perennial || finish_predicted_at.nil? - nil - else - calculate_percentage_grown + Rails.cache.fetch("#{cache_key_with_version}/percentage_grown", expires_in: 8.hours) do + if finished? + 100 + elsif !planted? + 0 + elsif crop.perennial || finish_predicted_at.nil? + nil + else + calculate_percentage_grown + end end end From a91a2c6ea5106e29128f69d595cc851b7170702d Mon Sep 17 00:00:00 2001 From: Brenda Date: Sun, 15 Dec 2019 15:56:22 +1300 Subject: [PATCH 2/4] Add ElasticSearch mappings, to fix intermittent errors --- app/models/concerns/crop_search.rb | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app/models/concerns/crop_search.rb b/app/models/concerns/crop_search.rb index d8de5d5cc..8402debcb 100644 --- a/app/models/concerns/crop_search.rb +++ b/app/models/concerns/crop_search.rb @@ -4,7 +4,14 @@ module CropSearch included do #################################### # Elastic search configuration - searchkick word_start: %i(name alternate_names scientific_names), case_sensitive: false + searchkick word_start: %i(name alternate_names scientific_names), + case_sensitive: false, + merge_mappings: true, + mappings: { + properties: { + created_at: {type: :integer} + } + } # Special scope to control if it's in the search index scope :search_import, -> { includes(:scientific_names, :photos) } From 2ec23d6a08ebeeb040970b61fde02db487513441 Mon Sep 17 00:00:00 2001 From: Brenda Date: Sun, 15 Dec 2019 15:32:32 +1300 Subject: [PATCH 3/4] Remove unnecesary mapping --- app/services/crop_search_service.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/services/crop_search_service.rb b/app/services/crop_search_service.rb index 57c042e48..be6b2a3de 100644 --- a/app/services/crop_search_service.rb +++ b/app/services/crop_search_service.rb @@ -29,7 +29,7 @@ class CropSearchService limit: limit, load: false, body: body - ).response['hits']['hits'].map { |c| c['_source'] } + ) end def self.recent(limit) @@ -37,6 +37,6 @@ class CropSearchService limit: limit, load: false, boost_by: { created_at: { factor: 100 } } # default factor is 1 - ).response['hits']['hits'].map { |c| c['_source'] } + ) end end From 22d7bd6a4e59f32c5e9e3a077399dd15c05e7a55 Mon Sep 17 00:00:00 2001 From: codefactor-io Date: Sun, 15 Dec 2019 02:58:12 +0000 Subject: [PATCH 4/4] [CodeFactor] Apply fixes --- app/models/concerns/crop_search.rb | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app/models/concerns/crop_search.rb b/app/models/concerns/crop_search.rb index 8402debcb..503c6a9ad 100644 --- a/app/models/concerns/crop_search.rb +++ b/app/models/concerns/crop_search.rb @@ -4,14 +4,14 @@ module CropSearch included do #################################### # Elastic search configuration - searchkick word_start: %i(name alternate_names scientific_names), - case_sensitive: false, - merge_mappings: true, - mappings: { - properties: { - created_at: {type: :integer} - } - } + searchkick word_start: %i(name alternate_names scientific_names), + case_sensitive: false, + merge_mappings: true, + mappings: { + properties: { + created_at: { type: :integer } + } + } # Special scope to control if it's in the search index scope :search_import, -> { includes(:scientific_names, :photos) }