Error de migración en 'rename_discourse_rewind_disabled_to_enabled'

Cuando esté dentro del contenedor, como usuario de discourse, en la raíz del directorio de discourse, puede ejecutar bin/rails db para conectarse a la base de datos correcta.

1 me gusta

Hola :waving_hand:

Yo también me encontré con este problema durante la reconstrucción. La única forma de volver a poner el sitio en línea fue revertir a un commit anterior. Después de revertir a un commit funcional, encontré este tema y ejecuté las consultas. Espero que los resultados sigan siendo útiles para identificar la causa raíz.

Consulta n.º 1

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

Consulta n.º 2

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

Consulta n.º 3

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

Consulta n.º 4

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

Gracias por ejecutar esas consultas @Don: has confirmado la causa raíz :raising_hands:

Tus resultados muestran exactamente lo que sospechábamos

  1. Tienes un esquema backup con una copia de user_options
  2. Esa tabla todavía tiene el valor predeterminado antiguo (column_default = false)
  3. La fila de backup apareció antes que public en los resultados de la consulta

Cuando la migración eliminó el valor predeterminado de public.user_options, no tocó backup.user_options. Luego, mark_readonly consultó information_schema.columns sin filtrar por esquema, obtuvo primero la fila de backup (que aún tenía el valor predeterminado) y falló :collision:

La solución es simplemente agregar table_schema = 'public' a la consulta para que solo compruebe el esquema en el que realmente operan las migraciones.

4 Me gusta

¡Gracias por la solución! Todo funciona perfectamente ahora para mí :hugs:

4 Me gusta

Lo siento mucho, encontré un problema antes de entrar a la base de datos y no pude proporcionar los resultados de la consulta, afortunadamente Don ya ha respondido.

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$

Pero, ¿cómo se soluciona este problema de acceso a la base de datos? :sweat_smile:

He investigado siguiendo estos pasos:

# 1. Ver la ubicación de debug en Gemfile
grep -n debug /var/www/discourse/Gemfile

# 2. Ver si application.rb requiere debug directamente
grep -n debug /var/www/discourse/config/application.rb

# 3. Ver si es introducido por un plugin
find /var/www/discourse/plugins -name '*.rb' -exec grep -l debug {} \;

Los resultados son los siguientes:

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

Instalé Discourse usando Docker (sin instalar ningún plugin), luego instalé MySQL dentro del contenedor, importé la base de datos de XenForo y usé el script de migración para migrar de XenForo a Discourse. Durante este proceso, debo haber modificado la configuración de Gemfile dentro del contenedor. Después de que la migración se completó con éxito, realicé varias reconstrucciones (rebuild) para actualizar.

Mi pregunta es: ¿Por qué sigo teniendo problemas al ejecutar comandos bin/rails db a pesar de haber realizado múltiples reconstrucciones y actualizaciones de Discourse?

Gracias.

Último comentario: se reinstaló el sistema operativo, se reimplementó Discourse y se importó la copia de seguridad. El error sigue apareciendo.