Eu também encontrei esse problema durante a reconstrução. A única maneira de colocar o site de volta no ar foi reverter para um commit anterior. Depois de reverter para um commit funcional, encontrei este tópico e executei as consultas. Espero que os resultados ainda sejam úteis para identificar a causa raiz.
Obrigado por executar essas consultas, @Don - você confirmou a causa raiz
Seus resultados mostram exatamente o que suspeitávamos
Você tem um esquema backup com uma cópia de user_options
Essa tabela ainda tem o padrão antigo (column_default = false)
A linha backup apareceu antes de public nos resultados da consulta
Quando a migração removeu o padrão de public.user_options, ela não tocou em backup.user_options. Então, mark_readonly consultou information_schema.columns sem filtrar por esquema, obteve a linha backup primeiro (que ainda tinha o padrão) e falhou
A correção é simplesmente adicionar table_schema = 'public' à consulta para que ela verifique apenas o esquema em que as migrações realmente operam.
Sinto muito, tive um problema antes de entrar no banco de dados e não consegui fornecer os resultados da consulta, mas felizmente o Don já deu um retorno.
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>'
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$
Mas como devo resolver esse problema de entrar no banco de dados?
# 1. Ver a localização de debug no Gemfile
grep -n debug /var/www/discourse/Gemfile
# 2. Ver se application.rb requer diretamente
grep -n debug /var/www/discourse/config/application.rb
# 3. Ver se foi introduzido por um plugin
find /var/www/discourse/plugins -name '*.rb' -exec grep -l debug {} \;
Eu usei a instalação do discourse via docker (sem instalar nenhum plugin), instalei o mysql no contêiner, importei o banco de dados do xenforo e usei o script de migração para migrar do xenforo para o discourse. Durante esse processo, devo ter modificado a configuração do Gemfile no contêiner. Após a migração ser bem-sucedida, realizei várias reconstruções (rebuilds) para atualização.
Minha dúvida é: por que ainda tenho problemas ao executar bin/rails db mesmo depois de ter feito várias reconstruções e atualizações no discourse?