DEV: Allow multisite apps to boot with readonly db.

This commit is contained in:
Guo Xiang Tan 2020-06-23 16:28:21 +08:00
parent 27b2e335ef
commit 84c12d8f3d
No known key found for this signature in database
GPG Key ID: FBD110179AAC1F20
1 changed files with 16 additions and 0 deletions

View File

@ -6,6 +6,22 @@ module RailsMultisite
self.each_connection do |db|
begin
yield(db) if block_given?
rescue PG::ConnectionBad, PG::UnableToSend, PG::ServerError
break if !defined?(RailsFailover::ActiveRecord)
break if db == RailsMultisite::ConnectionManagement::DEFAULT
reading_role = :"#{db}_#{ActiveRecord::Base.reading_role}"
spec = RailsMultisite::ConnectionManagement.connection_spec(db: db)
ActiveRecord::Base.connection_handlers[reading_role] ||= begin
handler = ActiveRecord::ConnectionAdapters::ConnectionHandler.new
RailsFailover::ActiveRecord.establish_reading_connection(handler, spec)
handler
end
ActiveRecord::Base.connected_to(role: reading_role) do
yield(db) if block_given?
end
rescue => e
STDERR.puts "URGENT: Failed to initialize site #{db}: "\
"#{e.class} #{e.message}\n#{e.backtrace.join("\n")}"