Exception: Failed to initialize site default after upgrade

I recently upgraded a self-hosted instance of Discourse using the ./launcher rebuild app strategy. The rebuild seemed to work, but Discourse itself failed to respond. Using docker logs app gives the following output:

run-parts: executing /etc/runit/1.d/00-ensure-links
run-parts: executing /etc/runit/1.d/00-fix-var-logs
run-parts: executing /etc/runit/1.d/01-cleanup-web-pids
run-parts: executing /etc/runit/1.d/anacron
run-parts: executing /etc/runit/1.d/cleanup-pids
Cleaning stale PID files
run-parts: executing /etc/runit/1.d/copy-env
[Mon Apr 13 06:24:19 PM UTC 2026] Run reload cmd: sv reload nginx
warning: nginx: unable to open supervise/ok: file does not exist
[Mon Apr 13 06:24:19 PM UTC 2026] e[1;31mReload error for :e[0m
Started runsvdir, PID is 1613
ok: run: redis: (pid 1624) 0s
ok: run: postgres: (pid 1626) 0s
supervisor pid: 1620 unicorn pid: 1655
I, [2026-04-13T18:24:33.162604 #1659]  INFO -- : listening on addr=127.0.0.1:3000 fd=12
URGENT: Failed to initialize site default: NoMethodError undefined method 'with_connection' for nil
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/activerecord-8.0.5/lib/active_record/relation.rb:1458:in 'block in ActiveRecord::Relation#exec_main_query'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/activerecord-8.0.5/lib/active_record/relation.rb:1480:in 'ActiveRecord::Relation#skip_query_cache_if_necessary'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/activerecord-8.0.5/lib/active_record/relation.rb:1442:in 'ActiveRecord::Relation#exec_main_query'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/activerecord-8.0.5/lib/active_record/relation.rb:1420:in 'block in ActiveRecord::Relation#exec_queries'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/activerecord-8.0.5/lib/active_record/relation.rb:1480:in 'ActiveRecord::Relation#skip_query_cache_if_necessary'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/activerecord-8.0.5/lib/active_record/relation.rb:1414:in 'ActiveRecord::Relation#exec_queries'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/goldiloader-6.0.0/lib/goldiloader/active_record_patches.rb:40:in 'Goldiloader::RelationPatch#exec_queries'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/activerecord-8.0.5/lib/active_record/relation.rb:1191:in 'ActiveRecord::Relation#load'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/activerecord-8.0.5/lib/active_record/relation.rb:353:in 'ActiveRecord::Relation#records'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/activerecord-8.0.5/lib/active_record/relation/delegation.rb:101:in 'ActiveRecord::Delegation#each'
/var/www/discourse/plugins/discourse-multilingual/lib/multilingual/translation.rb:29:in 'Multilingual::Translation.get'
/var/www/discourse/plugins/discourse-multilingual/plugin.rb:231:in 'block (2 levels) in SiteCategorySerializer#activate!'
(eval at /var/www/discourse/vendor/bundle/ruby/3.4.0/gems/active_model_serializers-0.8.4/lib/active_model/serializer.rb:467):4:in 'SiteCategorySerializer#_fast_attributes'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/active_model_serializers-0.8.4/lib/active_model/serializer.rb:468:in 'ActiveModel::Serializer#attributes'
/var/www/discourse/plugins/discourse-custom-wizard/lib/custom_wizard/extensions/custom_field/serializer.rb:4:in 'CustomWizardCustomFieldSerializer#attributes'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/active_model_serializers-0.8.4/lib/active_model/serializer.rb:480:in 'ActiveModel::Serializer#_serializable_hash'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/active_model_serializers-0.8.4/lib/active_model/serializer.rb:359:in 'ActiveModel::Serializer#serializable_hash'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/active_model_serializers-0.8.4/lib/active_model/array_serializer.rb:89:in 'block in ActiveModel::ArraySerializer#_serializable_array'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/active_model_serializers-0.8.4/lib/active_model/array_serializer.rb:79:in 'Array#map'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/active_model_serializers-0.8.4/lib/active_model/array_serializer.rb:79:in 'ActiveModel::ArraySerializer#_serializable_array'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/active_model_serializers-0.8.4/lib/active_model/array_serializer.rb:73:in 'ActiveModel::ArraySerializer#serializable_array'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/active_model_serializers-0.8.4/lib/active_model/array_serializer.rb:53:in 'ActiveModel::ArraySerializer#as_json'
/var/www/discourse/app/models/site.rb:102:in 'block in Site.all_categories_cache'
/var/www/discourse/lib/cache.rb:93:in 'Cache#fetch'
/var/www/discourse/app/models/site.rb:72:in 'Site.all_categories_cache'
/var/www/discourse/app/models/site.rb:122:in 'Site#categories'
/var/www/discourse/app/serializers/site_serializer.rb:320:in 'SiteSerializer#include_categories?'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/active_model_serializers-0.8.4/lib/active_model/serializer.rb:375:in 'ActiveModel::Serializer#include?'
(eval at /var/www/discourse/vendor/bundle/ruby/3.4.0/gems/active_model_serializers-0.8.4/lib/active_model/serializer.rb:467):35:in 'SiteSerializer#_fast_attributes'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/active_model_serializers-0.8.4/lib/active_model/serializer.rb:468:in 'ActiveModel::Serializer#attributes'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/active_model_serializers-0.8.4/lib/active_model/serializer.rb:480:in 'ActiveModel::Serializer#_serializable_hash'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/active_model_serializers-0.8.4/lib/active_model/serializer.rb:359:in 'ActiveModel::Serializer#serializable_hash'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/active_model_serializers-0.8.4/lib/active_model/serializer.rb:347:in 'ActiveModel::Serializer#as_json'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/activesupport-8.0.5/lib/active_support/json/encoding.rb:41:in 'Oj::Rails::Encoder#encode'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/activesupport-8.0.5/lib/active_support/json/encoding.rb:41:in 'ActiveSupport::JSON.encode'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/activesupport-8.0.5/lib/active_support/core_ext/object/json.rb:42:in 'ActiveSupport::ToJsonWithActiveSupportEncoder#to_json'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/active_model_serializers-0.8.4/lib/active_model/serializer.rb:331:in 'ActiveModel::Serializer#to_json'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/multi_json-1.19.1/lib/multi_json/adapters/oj.rb:62:in 'Oj.dump'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/multi_json-1.19.1/lib/multi_json/adapters/oj.rb:62:in 'MultiJson::Adapters::Oj#dump'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/multi_json-1.19.1/lib/multi_json/adapter.rb:66:in 'MultiJson::Adapter.dump'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/multi_json-1.19.1/lib/multi_json.rb:195:in 'MultiJson.dump'
/var/www/discourse/app/models/site.rb:251:in 'Site.json_for'
/var/www/discourse/lib/discourse.rb:1255:in 'block in Discourse.preload_rails!'
/var/www/discourse/lib/freedom_patches/rails_multisite.rb:16:in 'block in RailsMultisite::ConnectionManagement.safe_each_connection'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/rails_multisite-7.0.0/lib/rails_multisite/connection_management/null_instance.rb:49:in 'RailsMultisite::ConnectionManagement::NullInstance#with_connection'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/rails_multisite-7.0.0/lib/rails_multisite/connection_management/null_instance.rb:36:in 'RailsMultisite::ConnectionManagement::NullInstance#each_connection'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/rails_multisite-7.0.0/lib/rails_multisite/connection_management.rb:17:in 'RailsMultisite::ConnectionManagement.each_connection'
/var/www/discourse/lib/freedom_patches/rails_multisite.rb:9:in 'RailsMultisite::ConnectionManagement.each_active_connection'
/var/www/discourse/lib/freedom_patches/rails_multisite.rb:14:in 'RailsMultisite::ConnectionManagement.safe_each_connection'
/var/www/discourse/lib/discourse.rb:1247:in 'Discourse.preload_rails!'
config/pitchfork.conf.rb:55:in 'block in Pitchfork::Configurator#load'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork/http_server.rb:965:in 'Pitchfork::HttpServer#init_mold_process'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork/http_server.rb:1073:in 'Pitchfork::HttpServer#mold_loop'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork/http_server.rb:696:in 'block in Pitchfork::HttpServer#spawn_initial_mold'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork.rb:170:in 'block in Pitchfork.clean_fork'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork.rb:168:in 'Kernel#catch'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork.rb:168:in 'Pitchfork.clean_fork'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork/http_server.rb:690:in 'Pitchfork::HttpServer#spawn_initial_mold'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork/http_server.rb:176:in 'Pitchfork::HttpServer#start'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/pitchfork-0.18.2/exe/pitchfork:110:in '<top (required)>'
/var/www/discourse/vendor/bundle/ruby/3.4.0/bin/pitchfork:25:in 'Kernel#load'
/var/www/discourse/vendor/bundle/ruby/3.4.0/bin/pitchfork:25:in '<main>'
I, [2026-04-13T18:24:55.272232 #1655]  INFO -- : mold gen=0 pid=1659 ready
I, [2026-04-13T18:24:55.272392 #1655]  INFO -- : monitor pid=1655 ready
I, [2026-04-13T18:24:55.272465 #1655]  INFO -- : monitor process ready
I, [2026-04-13T18:24:55.273154 #1659]  INFO -- : service gen=0 spawning...
I, [2026-04-13T18:24:56.299170 #2421]  INFO -- : starting 1 supervised sidekiqs
I, [2026-04-13T18:24:56.299585 #1655]  INFO -- : service gen=0 pid=2421 spawned
I, [2026-04-13T18:24:56.327552 #1659]  INFO -- : worker=0 gen=0 spawning...
I, [2026-04-13T18:24:57.352058 #1655]  INFO -- : worker=0 gen=0 pid=2428 registered
I, [2026-04-13T18:24:57.378980 #1659]  INFO -- : worker=1 gen=0 spawning...
I, [2026-04-13T18:24:57.424859 #2428]  INFO -- : worker=0 gen=0 pid=2428 ready
I, [2026-04-13T18:24:57.734069 #2467]  INFO -- : Loading Sidekiq in process id 2467
I, [2026-04-13T18:24:58.407835 #1655]  INFO -- : worker=1 gen=0 pid=2531 registered
I, [2026-04-13T18:24:58.432123 #1659]  INFO -- : worker=2 gen=0 spawning...
I, [2026-04-13T18:24:58.476681 #2531]  INFO -- : worker=1 gen=0 pid=2531 ready
I, [2026-04-13T18:24:59.458790 #1655]  INFO -- : worker=2 gen=0 pid=2610 registered
I, [2026-04-13T18:24:59.485286 #1659]  INFO -- : worker=3 gen=0 spawning...
I, [2026-04-13T18:24:59.546700 #2610]  INFO -- : worker=2 gen=0 pid=2610 ready
I, [2026-04-13T18:25:00.517958 #1655]  INFO -- : worker=3 gen=0 pid=2637 registered
I, [2026-04-13T18:25:00.589481 #2637]  INFO -- : worker=3 gen=0 pid=2637 ready

Would anyone be willing to suggest what might have gone wrong?

As suggested in another topic, I tried restarting the Docker service; now Discourse responds, but hangs at the ā€œbouncing dotsā€ without loading the forum. I’m going to poke around in the Docker image and see if the logs there are more informative, although I’m certainly open to suggestions…

Remove the broken Customization > Plugin Multilingual Plugin 🌐 and rebuild.

3 likes

That did it; what a relief! Thanks so much, I forgot that Discourse Multilingual was broken!

2 likes