hensei-api/lib/post_deployment/search_indexer.rb
Justin Edmund d71b78e5f8
Update post-deploy script and Rails credentials (#155)
* Fresh credentials.yml.enc

* Update .ruby-gemset

* Made PostDeploymentManager modular

We broke PostDeploymentManager out into several files to make it easier to maintain.

We also added a "force" mode that forces the script to consider all CSV files. This is useful for testing the post-deploy script itself. This should only be used in test mode or you will dirty your database.

We also fine tuned some of the logging to make sure that both verbose and non-verbose modes are helpful.
2025-01-15 14:56:38 -08:00

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