diff options
| author | erdgeist <erdgeist@erdgeist.org> | 2026-07-11 23:41:29 +0200 |
|---|---|---|
| committer | erdgeist <erdgeist@erdgeist.org> | 2026-07-11 23:41:29 +0200 |
| commit | 47beb3fe6ed6fdb75c2dd3a55362ad1aba3bbc3b (patch) | |
| tree | 2d52eac9a127a8b002dfa951e9b31e677617662b /config/initializers | |
| parent | 57588a423878016c9981751d50337e37cddea778 (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.rb | 7 |
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 @@ | |||
| 1 | Rails.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 | ||
| 7 | end | ||
