mirror of
https://github.com/basecamp/once-campfire.git
synced 2026-10-08 15:50:08 +09:00
Repair message counters within database task pools
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user