* Importer now displays validation errors This will help people debug errors before submitting their PR. * Fix errors in the outstanding updates
61 lines
1.4 KiB
Ruby
61 lines
1.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require_relative '../logging_helper'
|
|
|
|
module PostDeployment
|
|
class SearchIndexer
|
|
include LoggingHelper
|
|
|
|
def initialize(test_mode:, verbose:)
|
|
@test_mode = test_mode
|
|
@verbose = verbose
|
|
end
|
|
|
|
def rebuild_all
|
|
log_header 'Rebuilding search indices...', '-'
|
|
puts "\n"
|
|
|
|
ensure_models_loaded
|
|
rebuild_indices
|
|
end
|
|
|
|
private
|
|
|
|
def ensure_models_loaded
|
|
Rails.application.eager_load! if Rails.application.config.eager_load
|
|
end
|
|
|
|
def rebuild_indices
|
|
searchable_models.each do |model_name|
|
|
begin
|
|
model = model_name.constantize
|
|
rebuild_index_for(model)
|
|
rescue NameError => e
|
|
log_error("Could not load model: #{model_name}")
|
|
log_error(e.message) if @verbose
|
|
end
|
|
end
|
|
end
|
|
|
|
def rebuild_index_for(model)
|
|
if @test_mode
|
|
log_step "Would rebuild search index for #{model.name}"
|
|
else
|
|
log_verbose "• #{model.name}... "
|
|
PgSearch::Multisearch.rebuild(model)
|
|
log_verbose "✅ done!\n"
|
|
end
|
|
rescue StandardError => e
|
|
log_error("Failed to rebuild index for #{model.name}: #{e.message}")
|
|
log_error(e.backtrace.take(5).join("\n")) if @verbose
|
|
end
|
|
|
|
def searchable_models
|
|
%w[Character Summon Weapon Job]
|
|
end
|
|
|
|
def log_error(message)
|
|
puts "#{message}"
|
|
end
|
|
end
|
|
end
|