Я тоже столкнулся с этой проблемой во время восстановления. Единственный способ вернуть сайт в онлайн — откатиться к предыдущему коммиту. После отката к рабочему коммиту я нашел эту тему и выполнил запросы. Надеюсь, результаты всё ещё полезны для определения корневой причины.
Спасибо за выполнение этих запросов, @Don — вы подтвердили первопричину
Ваши результаты точно подтверждают наши предположения:
У вас есть схема backup с копией таблицы user_options.
В этой таблице всё ещё установлено старое значение по умолчанию (column_default = false).
Строка из схемы backup появилась в результатах запроса раньше, чем строка из public.
Когда миграция удалила значение по умолчанию для public.user_options, она не затронула backup.user_options. Затем функция mark_readonly запросила information_schema.columns без фильтрации по схеме, первой получила строку из backup (где значение по умолчанию всё ещё было установлено) и завершилась с ошибкой
Исправление простое: достаточно добавить условие table_schema = 'public' в запрос, чтобы проверять только схему, с которой фактически работают миграции.
Очень извиняюсь, у меня возникли проблемы при попытке подключиться к базе данных, поэтому я не смог предоставить результаты запроса. К счастью, Дон уже сообщил об этом.
discourse@jerry-app:/var/www/discourse$ bin/rails db
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/runtime.rb:71:in `rescue in block (2 levels) in require': There was an error while trying to load the gem 'debug/prelude'. (Bundler::GemRequireError)
Gem Load Error is: cannot load such file -- debug/prelude
Backtrace for gem load error is:
<internal:/usr/local/lib/ruby/3.3.0/rubygems/core_ext/kernel_require.rb>:37:in `require'
<internal:/usr/local/lib/ruby/3.3.0/rubygems/core_ext/kernel_require.rb>:37:in `require'
/usr/local/lib/ruby/3.3.0/bundled_gems.rb:69:in `block (2 levels) in replace_require'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/runtime.rb:63:in `block (2 levels) in require'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/runtime.rb:58:in `each'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/runtime.rb:58:in `block in require'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/runtime.rb:52:in `each'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/runtime.rb:52:in `require'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler.rb:215:in `require'
/var/www/discourse/config/application.rb:55:in `<main>'
/usr/local/lib/ruby/3.3.0/bundled_gems.rb:69:in `require'
/usr/local/lib/ruby/3.3.0/bundled_gems.rb:69:in `block (2 levels) in replace_require'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/bootsnap-1.19.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.4/lib/rails/command/actions.rb:15:in `require_application!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.4/lib/rails/command/environment_argument.rb:31:in `require_application!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.4/lib/rails/command/actions.rb:19:in `boot_application!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.4/lib/rails/commands/dbconsole/dbconsole_command.rb:83:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.4.0/lib/thor/command.rb:28:in `run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.4.0/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.4/lib/rails/command/base.rb:178:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.4.0/lib/thor.rb:538:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.4/lib/rails/command/base.rb:73:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.4/lib/rails/command.rb:65:in `block in invoke'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.4/lib/rails/command.rb:143:in `with_argv'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.4/lib/rails/command.rb:63:in `invoke'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.4/lib/rails/commands.rb:18:in `<main>'
/usr/local/lib/ruby/3.3.0/bundled_gems.rb:69:in `require'
/usr/local/lib/ruby/3.3.0/bundled_gems.rb:69:in `block (2 levels) in replace_require'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/bootsnap-1.19.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
bin/rails:18:in `<main>'
Bundler Error Backtrace:
from /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/runtime.rb:62:in `block (2 levels) in require'
from /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/runtime.rb:58:in `each'
from /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/runtime.rb:58:in `block in require'
from /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/runtime.rb:52:in `each'
from /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/runtime.rb:52:in `require'
from /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler.rb:215:in `require'
from /var/www/discourse/config/application.rb:55:in `<main>'
from /usr/local/lib/ruby/3.3.0/bundled_gems.rb:69:in `require'
from /usr/local/lib/ruby/3.3.0/bundled_gems.rb:69:in `block (2 levels) in replace_require'
from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/bootsnap-1.19.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.4/lib/rails/command/actions.rb:15:in `require_application!'
from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.4/lib/rails/command/environment_argument.rb:31:in `require_application!'
from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.4/lib/rails/command/actions.rb:19:in `boot_application!'
from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.4/lib/rails/commands/dbconsole/dbconsole_command.rb:83:in `perform'
from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.4.0/lib/thor/command.rb:28:in `run'
from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.4.0/lib/thor/invocation.rb:127:in `invoke_command'
from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.4/lib/rails/command/base.rb:178:in `invoke_command'
from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.4.0/lib/thor.rb:538:in `dispatch'
from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.4/lib/rails/command/base.rb:73:in `perform'
from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.4/lib/rails/command.rb:65:in `block in invoke'
from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.4/lib/rails/command.rb:143:in `with_argv'
from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.4/lib/rails/command.rb:63:in `invoke'
from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.4/lib/rails/commands.rb:18:in `<main>'
from /usr/local/lib/ruby/3.3.0/bundled_gems.rb:69:in `require'
from /usr/local/lib/ruby/3.3.0/bundled_gems.rb:69:in `block (2 levels) in replace_require'
from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/bootsnap-1.19.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
from bin/rails:18:in `<main>'
<internal:/usr/local/lib/ruby/3.3.0/rubygems/core_ext/kernel_require.rb>:37:in `require': cannot load such file -- debug/prelude (LoadError)
from <internal:/usr/local/lib/ruby/3.3.0/rubygems/core_ext/kernel_require.rb>:37:in `require'
from /usr/local/lib/ruby/3.3.0/bundled_gems.rb:69:in `block (2 levels) in replace_require'
from /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/runtime.rb:63:in `block (2 levels) in require'
from /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/runtime.rb:58:in `each'
from /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/runtime.rb:58:in `block in require'
from /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/runtime.rb:52:in `each'
from /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/runtime.rb:52:in `require'
from /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler.rb:215:in `require'
from /var/www/discourse/config/application.rb:55:in `<main>'
from /usr/local/lib/ruby/3.3.0/bundled_gems.rb:69:in `require'
from /usr/local/lib/ruby/3.3.0/bundled_gems.rb:69:in `block (2 levels) in replace_require'
from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/bootsnap-1.19.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.4/lib/rails/command/actions.rb:15:in `require_application!'
from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.4/lib/rails/command/environment_argument.rb:31:in `require_application!'
from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.4/lib/rails/command/actions.rb:19:in `boot_application!'
from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.4/lib/rails/commands/dbconsole/dbconsole_command.rb:83:in `perform'
from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.4.0/lib/thor/command.rb:28:in `run'
from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.4.0/lib/thor/invocation.rb:127:in `invoke_command'
from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.4/lib/rails/command/base.rb:178:in `invoke_command'
from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.4.0/lib/thor.rb:538:in `dispatch'
from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.4/lib/rails/command/base.rb:73:in `perform'
from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.4/lib/rails/command.rb:65:in `block in invoke'
from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.4/lib/rails/command.rb:143:in `with_argv'
from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.4/lib/rails/command.rb:63:in `invoke'
from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-8.0.4/lib/rails/commands.rb:18:in `<main>'
from /usr/local/lib/ruby/3.3.0/bundled_gems.rb:69:in `require'
from /usr/local/lib/ruby/3.3.0/bundled_gems.rb:69:in `block (2 levels) in replace_require'
from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/bootsnap-1.19.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
from bin/rails:18:in `<main>'
discourse@jerry-app:/var/www/discourse$
Но как решить эту проблему с подключением к базе данных?
# 1. Проверить расположение debug в Gemfile
grep -n debug /var/www/discourse/Gemfile
# 2. Проверить, есть ли прямой require в application.rb
grep -n debug /var/www/discourse/config/application.rb
# 3. Проверить, не добавлен ли он плагином
find /var/www/discourse/plugins -name '*.rb' -exec grep -l debug {} \;
Я установил Discourse с помощью Docker (без установки каких-либо плагинов), затем внутри контейнера установил MySQL, импортировал базу данных XenForo и использовал скрипт миграции для переноса данных из XenForo в Discourse. В процессе этого я, вероятно, изменял настройки Gemfile внутри контейнера. После успешной миграции я многократно выполнял rebuild, обновления и апгрейды.
Мой вопрос: я уже многократно выполнял rebuild и обновления Discourse, почему при выполнении команд bin/rails db всё ещё возникают проблемы?