Ошибка миграции в 'rename_discourse_rewind_disabled_to_enabled'

Привет :waving_hand:

Я тоже столкнулся с этой проблемой во время восстановления. Единственный способ вернуть сайт в онлайн — откатиться к предыдущему коммиту. После отката к рабочему коммиту я нашел эту тему и выполнил запросы. Надеюсь, результаты всё ещё полезны для определения корневой причины.

Запрос #1

 table_schema |        column_name        | column_default 
--------------+---------------------------+----------------
 backup       | discourse_rewind_disabled | false
 public       | discourse_rewind_disabled | false
(2 rows)

Запрос #2

 nspname |  oid  
---------+-------
 public  |  2200
 backup  | 22997
(2 rows)

Запрос #3

 table_schema | has_default 
--------------+-------------
 backup       | t
 public       | t
(2 rows)

Запрос #4

       nspname       |  oid  
---------------------+-------
 discourse_functions | 19411
 backup              | 22997
(2 rows)

Спасибо за выполнение этих запросов, @Don — вы подтвердили первопричину :raising_hands:

Ваши результаты точно подтверждают наши предположения:

  1. У вас есть схема backup с копией таблицы user_options.
  2. В этой таблице всё ещё установлено старое значение по умолчанию (column_default = false).
  3. Строка из схемы backup появилась в результатах запроса раньше, чем строка из public.

Когда миграция удалила значение по умолчанию для public.user_options, она не затронула backup.user_options. Затем функция mark_readonly запросила information_schema.columns без фильтрации по схеме, первой получила строку из backup (где значение по умолчанию всё ещё было установлено) и завершилась с ошибкой :collision:

Исправление простое: достаточно добавить условие table_schema = 'public' в запрос, чтобы проверять только схему, с которой фактически работают миграции.

Спасибо за исправление! У меня теперь всё работает идеально :hugs:

Очень извиняюсь, у меня возникли проблемы при попытке подключиться к базе данных, поэтому я не смог предоставить результаты запроса. К счастью, Дон уже сообщил об этом.

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$

Но как решить эту проблему с подключением к базе данных? :sweat_smile:

Я проверил ситуацию по следующему алгоритму:

# 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@jerry-app:~$ grep -n debug /var/www/discourse/Gemfile
147:  gem "debug", ">= 1.0.0", require: "debug/prelude"
discourse@jerry-app:~$ grep -n debug /var/www/discourse/config/application.rb
discourse@jerry-app:~$ find /var/www/discourse/plugins -name '*.rb' -exec grep -l debug {} \;
/var/www/discourse/plugins/chat/app/controllers/chat/incoming_webhooks_controller.rb
/var/www/discourse/plugins/chat/app/jobs/regular/chat/channel_delete.rb
/var/www/discourse/plugins/chat/spec/requests/chat/incoming_webhooks_controller_spec.rb
/var/www/discourse/plugins/automation/lib/discourse_automation/triggers/recurring.rb
/var/www/discourse/plugins/discourse-oauth2-basic/lib/oauth2_basic_authenticator.rb
/var/www/discourse/plugins/discourse-ai/app/controllers/discourse_ai/admin/ai_llms_controller.rb
/var/www/discourse/plugins/discourse-ai/app/controllers/discourse_ai/ai_bot/bot_controller.rb
/var/www/discourse/plugins/discourse-ai/evals/lib/recorder.rb
/var/www/discourse/plugins/discourse-ai/evals/lib/prompts/single_test_runner.rb
/var/www/discourse/plugins/discourse-ai/discourse_automation/llm_report.rb
/var/www/discourse/plugins/discourse-ai/lib/automation/llm_tagger.rb
/var/www/discourse/plugins/discourse-ai/lib/automation/report_runner.rb
/var/www/discourse/plugins/discourse-ai/lib/ai_bot/response_http_streamer.rb
/var/www/discourse/plugins/discourse-ai/lib/ai_bot/entry_point.rb
/var/www/discourse/plugins/discourse-ai/lib/guardian_extensions.rb
/var/www/discourse/plugins/discourse-ai/config/routes.rb
/var/www/discourse/plugins/discourse-ai/spec/requests/ai_bot/bot_controller_spec.rb
/var/www/discourse/plugins/discourse-ai/spec/lib/modules/automation/report_runner_spec.rb
/var/www/discourse/plugins/discourse-ai/spec/lib/modules/ai_bot/entry_point_spec.rb
/var/www/discourse/plugins/docker_manager/app/controllers/docker_manager/admin_controller.rb

Я установил Discourse с помощью Docker (без установки каких-либо плагинов), затем внутри контейнера установил MySQL, импортировал базу данных XenForo и использовал скрипт миграции для переноса данных из XenForo в Discourse. В процессе этого я, вероятно, изменял настройки Gemfile внутри контейнера. После успешной миграции я многократно выполнял rebuild, обновления и апгрейды.

Мой вопрос: я уже многократно выполнял rebuild и обновления Discourse, почему при выполнении команд bin/rails db всё ещё возникают проблемы?

Спасибо.

Свежий фидбек: переустановлена операционная система, заново развернут Discourse, импортирована резервная копия. Ошибка всё ещё возникает.