summaryrefslogtreecommitdiff
path: root/config/initializers
diff options
context:
space:
mode:
authorerdgeist <erdgeist@erdgeist.org>2026-07-11 23:41:29 +0200
committererdgeist <erdgeist@erdgeist.org>2026-07-11 23:41:29 +0200
commit47beb3fe6ed6fdb75c2dd3a55362ad1aba3bbc3b (patch)
tree2d52eac9a127a8b002dfa951e9b31e677617662b /config/initializers
parent57588a423878016c9981751d50337e37cddea778 (diff)
Make page_translations' search trigger self-installing
search_vector is populated by a raw Postgres trigger created via execute() in a migration -- invisible to schema.rb, which only represents structure Rails understands. Any database rebuilt from schema.rb rather than replayed migrations (test, a fresh db:setup, disaster recovery) silently lost full-text search entirely, with no error -- NULL @@ anything is never true in Postgres. Page.ensure_search_vector_trigger!, called from an after_initialize initializer, reinstalls the trigger via CREATE OR REPLACE on every boot, in every environment. Idempotent and cheap.
Diffstat (limited to 'config/initializers')
-rw-r--r--config/initializers/ensure_search_vector_trigger.rb7
1 files changed, 7 insertions, 0 deletions
diff --git a/config/initializers/ensure_search_vector_trigger.rb b/config/initializers/ensure_search_vector_trigger.rb
new file mode 100644
index 0000000..a750e9c
--- /dev/null
+++ b/config/initializers/ensure_search_vector_trigger.rb
@@ -0,0 +1,7 @@
1Rails.application.config.after_initialize do
2 begin
3 Page.ensure_search_vector_trigger! if Page.connection.table_exists?(:page_translations)
4 rescue ActiveRecord::NoDatabaseError, ActiveRecord::ConnectionNotEstablished, PG::ConnectionBad
5 # Database doesn't exist yet -- e.g. mid `rails db:create`. Nothing to install yet.
6 end
7end