mirror of
https://github.com/discourse/discourse.git
synced 2025-02-20 11:48:26 -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
|
Discourse.git_version
|
||||||
|
|
||||||
reload_settings = lambda {
|
reload_settings = lambda {
|
||||||
RailsMultisite::ConnectionManagement.each_connection do
|
RailsMultisite::ConnectionManagement.safe_each_connection do
|
||||||
begin
|
begin
|
||||||
SiteSetting.refresh!
|
SiteSetting.refresh!
|
||||||
|
|
||||||
@ -13,10 +13,6 @@ reload_settings = lambda {
|
|||||||
end
|
end
|
||||||
rescue ActiveRecord::StatementInvalid
|
rescue ActiveRecord::StatementInvalid
|
||||||
# This will happen when migrating a new database
|
# 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
|
||||||
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
|
Scheduler::Defer.async = false
|
||||||
|
|
||||||
# warm up AR
|
# warm up AR
|
||||||
RailsMultisite::ConnectionManagement.each_connection do
|
RailsMultisite::ConnectionManagement.safe_each_connection do
|
||||||
(ActiveRecord::Base.connection.tables - %w[schema_migrations]).each do |table|
|
(ActiveRecord::Base.connection.tables - %w[schema_migrations]).each do |table|
|
||||||
table.classify.constantize.first rescue nil
|
table.classify.constantize.first rescue nil
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user