Repair message counters within database task pools

This commit is contained in:
GPT on behalf of DHH
2026-10-07 23:50:37 +02:00
parent fd49099729
commit f792e16e64
3 changed files with 178 additions and 10 deletions
+22 -9
View File
@@ -1,4 +1,25 @@
# schema.rb cannot dump SQLite triggers — reinstall after schema loads.
# Repair while DatabaseTasks still selects the database it loaded or migrated.
# db:prepare calls these methods directly, and test tasks restore their original
# pool before a Rake enhancement runs. This also avoids Rake's once-only invoke.
module RoomMessagesCountDatabaseTasks
def load_schema(...)
super.tap { repair_room_messages_count }
end
def migrate(...)
super.tap { repair_room_messages_count }
end
private
def repair_room_messages_count
migration_connection_pool.with_connection do |connection|
Room::MessagesCount.ensure!(connection)
end
end
end
ActiveRecord::Tasks::DatabaseTasks.singleton_class.prepend(RoomMessagesCountDatabaseTasks)
namespace :room_messages_count do
task ensure: :environment do
ActiveRecord::Base.connection_pool.with_connection do |connection|
@@ -6,11 +27,3 @@ namespace :room_messages_count do
end
end
end
%w[db:schema:load db:test:load_schema].each do |task_name|
next unless Rake::Task.task_defined?(task_name)
Rake::Task[task_name].enhance do
Rake::Task["room_messages_count:ensure"].invoke
end
end