mirror of
https://github.com/discourse/discourse.git
synced 2025-02-16 18:24:52 -06:00
FIX: Sidekiq fails to start if any of the multisite has problems.
This commit is contained in:
parent
6d353a1e47
commit
e564fe1866
36
config/initializers/004-rails_multisite.rb
Normal file
36
config/initializers/004-rails_multisite.rb
Normal file
@ -0,0 +1,36 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module RailsMultisite
|
||||
class ConnectionManagement
|
||||
def self.safe_each_connection
|
||||
self.each_connection do |db|
|
||||
begin
|
||||
yield(db) if block_given?
|
||||
rescue => e
|
||||
STDERR.puts "URGENT: Failed to initialize site #{db}: "\
|
||||
"#{e.class} #{e.message}\n#{e.backtrace.join("\n")}"
|
||||
|
||||
# the show must go on, don't stop startup if multisite fails
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class DiscoursePatches
|
||||
def self.config
|
||||
{
|
||||
db_lookup: lambda do |env|
|
||||
env["PATH_INFO"] == "/srv/status" ? "default" : nil
|
||||
end
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if Rails.configuration.multisite
|
||||
Rails.configuration.middleware.swap(
|
||||
RailsMultisite::Middleware,
|
||||
RailsMultisite::Middleware,
|
||||
RailsMultisite::DiscoursePatches.config
|
||||
)
|
||||
end
|
@ -4,7 +4,7 @@
|
||||
Discourse.git_version
|
||||
|
||||
reload_settings = lambda {
|
||||
RailsMultisite::ConnectionManagement.each_connection do
|
||||
RailsMultisite::ConnectionManagement.safe_each_connection do
|
||||
begin
|
||||
SiteSetting.refresh!
|
||||
|
||||
@ -13,10 +13,6 @@ reload_settings = lambda {
|
||||
end
|
||||
rescue ActiveRecord::StatementInvalid
|
||||
# This will happen when migrating a new database
|
||||
rescue => e
|
||||
STDERR.puts "URGENT: Failed to initialize site #{RailsMultisite::ConnectionManagement.current_db}:"\
|
||||
"#{e.message}\n#{e.backtrace.join("\n")}"
|
||||
# the show must go on, don't stop startup if multisite fails
|
||||
end
|
||||
end
|
||||
}
|
||||
|
@ -1,19 +0,0 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class RailsMultisite::DiscoursePatches
|
||||
def self.config
|
||||
{
|
||||
db_lookup: lambda do |env|
|
||||
env["PATH_INFO"] == "/srv/status" ? "default" : nil
|
||||
end
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
if Rails.configuration.multisite
|
||||
Rails.configuration.middleware.swap(
|
||||
RailsMultisite::Middleware,
|
||||
RailsMultisite::Middleware,
|
||||
RailsMultisite::DiscoursePatches.config
|
||||
)
|
||||
end
|
@ -46,7 +46,7 @@ if Sidekiq.server?
|
||||
Scheduler::Defer.async = false
|
||||
|
||||
# warm up AR
|
||||
RailsMultisite::ConnectionManagement.each_connection do
|
||||
RailsMultisite::ConnectionManagement.safe_each_connection do
|
||||
(ActiveRecord::Base.connection.tables - %w[schema_migrations]).each do |table|
|
||||
table.classify.constantize.first rescue nil
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user