* 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.
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
|