NoMethodError: método no definido `min_tags_from_required_group'

¡Hola equipo de Discourse!

Estoy intentando ejecutar Discourse Docker en Ubuntu en la versión estable (v2.8.8) y me encuentro con el siguiente error:

rake aborted!
NoMethodError: undefined method `min_tags_from_required_group' for #<Category:0x00007fc2ffae9f38>
/src/lib/seed_data/categories.rb:114:in `create_category'
/src/lib/seed_data/categories.rb:15:in `block (2 levels) in create'
/src/lib/seed_data/categories.rb:15:in `each'
/src/lib/seed_data/categories.rb:15:in `block in create'
/src/lib/seed_data/categories.rb:14:in `create'
(eval):6:in `block (2 levels) in run_file'
/src/lib/tasks/db.rake:225:in `block (2 levels) in <main>'
/src/lib/distributed_mutex.rb:33:in `block in synchronize'
/src/lib/distributed_mutex.rb:29:in `synchronize'
/src/lib/distributed_mutex.rb:29:in `synchronize'
/src/lib/distributed_mutex.rb:14:in `synchronize'
/src/lib/tasks/db.rake:210:in `block in <main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

Información adicional de lo que he hecho hasta ahora:

Lo que he hecho hasta ahora para llegar aquí:

sudo -s
git clone -b v2.8.8 https://github.com/discourse/discourse.git
chmod -R 2777 ./discourse
cd discourse

Me encontré con algunos problemas de marcadores anteriormente, así que tuve que:

nano db/migrate/20220104053343_add_bookmark_polymorphic_columns.rb

y pegado esto: discourse/db/migrate/20220322024216_add_bookmark_polymorphic_columns.rb at cd817a436574cd00f0bae339ec0c4fe2fcf2bb50 · discourse/discourse · GitHub

Luego, cuando ejecuto:

d/boot_dev -p --init

Recibo el error sobre min_tags_from_required_groups.

¿Alguien puede ayudar?

¿Se trata de una instalación de desarrollo o una instalación estándar?

Si intentas ejecutar en producción, entonces establecerías la versión en estable en tu app.yml. No clonarías Discourse como indicaste.

¿Tienes algún plugin?

Hola @pfaffman,

¡Gracias por responder!

Esta es una instancia de desarrollo, así que no tengo el app.yml.

No hay plugins instalados, solo esperaba ejecutar una instancia de desarrollo en estable en Ubuntu.

¡Ah! Ya veo. Quizás no debería publicar en medio de la noche.

¿Había una base de datos antes de que cambiara a estable? Quizás necesites

  rake db:drop db:create db:migrate

No deberías necesitar seleccionar una migración.

1 me gusta

Hola @pfaffman ,

¡Espero que hayas tenido un fin de semana increíble! ¡Gracias por responder, lo probaré hoy y te informaré!

1 me gusta

Hola @pfaffman ,

Después de ejecutar sudo -s y luego d/rake db:drop db:create db:migrate, recibí el siguiente error:

PG::InsufficientPrivilege: ERROR:  must be owner of database discourse_development
Couldn't drop database 'discourse_development'
rake aborted!
ActiveRecord::StatementInvalid: PG::InsufficientPrivilege: ERROR:  must be owner of database discourse_development


Caused by:
PG::InsufficientPrivilege: ERROR:  must be owner of database discourse_development

Tasks: TOP => db:drop:_unsafe
(See full trace by running task with --trace)

Entré en d/psql y obtuve la lista:

discourse-> \l
                                          List of databases
           Name           |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges    
--------------------------+----------+----------+-------------+-------------+------------------------
 discourse                | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres          +
                          |          |          |             |             | postgres=CTc/postgres +
                          |          |          |             |             | discourse=CTc/postgres
 discourse_development    | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres          +
                          |          |          |             |             | postgres=CTc/postgres +
                          |          |          |             |             | discourse=CTc/postgres
 discourse_test           | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres          +
                          |          |          |             |             | postgres=CTc/postgres +
                          |          |          |             |             | discourse=CTc/postgres
 discourse_test_multisite | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres          +
                          |          |          |             |             | postgres=CTc/postgres +
                          |          |          |             |             | discourse=CTc/postgres
 postgres                 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0                | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres           +
                          |          |          |             |             | postgres=CTc/postgres
 template1                | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres           +
                          |          |          |             |             | postgres=CTc/postgres
(7 rows)

¿Cómo puedo resolver este error?

Hmm. Quizás solo elimina y recrea esas bases de datos tú mismo y luego migra con la tarea de rake. O dale al usuario de Discourse derechos para crear y destruir (creo que es más fácil).

Hola @pfaffman,

Lamentablemente, no estoy muy familiarizado con el proceso de otorgar al usuario de Discourse los derechos para crear y destruir. En la primera opción, ¿estás diciendo que debería eliminar todas estas bases de datos y luego ejecutar d/rake db:create db:migrate? ¿Es correcto?

1 me gusta

Busca en Google “roles de usuario de postgres” o algo así. Eso es lo que hago. Es algo así como

su - postgres
psql
grant all rights to usee 'discoursev;

Pero eso probablemente esté mal

Hola @pfaffman,

¡Gracias por tu ayuda hasta ahora! Solo quiero dar un paso atrás antes de profundizar en la solución de problemas de psql, mi objetivo principal es simplemente ejecutar el entorno de desarrollo de Docker de Discourse (en estable) en Ubuntu, lo que funciona bien y como se espera en Mac. ¿No debería poder hacer esto sin estos errores de tabla y migración? Cuando intento hacer una instalación limpia, obtengo el error de marcador, y después de resolverlo, obtengo este NoMethodError, y ahora el error InsufficientPrivilege.

Inicialmente pensé que era porque estaba en test-passed y luego cambiar a estable causó el problema, pero incluso en una instancia de Ubuntu limpia y vacía, el NoMethodError todavía aparece, esto es sin ninguna base de datos previa existente, solo hice el Paso #1 y el Paso #2 aquí:

¿Puedes instalar estable en Ubuntu sin problemas?

¡Subiendo este hilo! Me pregunto si alguien más ha tenido éxito ejecutando un entorno de desarrollador en la versión estable de Ubuntu.

Prueba

   ./bundle exec rake db:drop db:create db:migrate

Hola @pfaffman,

¡Gracias por tu respuesta! Desafortunadamente, sigo encontrando el mismo problema:

d/bundle exec rake db:drop db:create db:migrate
PG::InsufficientPrivilege: ERROR:  must be owner of database discourse_development
Couldn't drop database 'discourse_development'
rake aborted!
ActiveRecord::StatementInvalid: PG::InsufficientPrivilege: ERROR:  must be owner of database discourse_development
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'

Caused by:
PG::InsufficientPrivilege: ERROR:  must be owner of database discourse_development
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => db:drop:_unsafe
(See full trace by running task with --trace)

Lo he intentado en una instancia vacía (reiniciada desde el principio, sin bases de datos ni información existentes) usando la guía para principiantes y arroja el mismo resultado.

Este es el error que todavía obtengo en d/rails s

NoMethodError (undefined method `min_tags_from_required_group' for #<Category:0x00007f3cca7ce5a8>)
(eval):36:in `_fast_attributes'
app/models/site.rb:70:in `block in all_categories_cache'
lib/cache.rb:94:in `fetch'
app/models/site.rb:52:in `all_categories_cache'
app/models/site.rb:78:in `categories'
app/serializers/site_serializer.rb:203:in `categories'
(eval):32:in `_fast_attributes'
app/models/site.rb:167:in `json_for'
app/controllers/application_controller.rb:595:in `preload_anonymous_data'
app/controllers/finish_installation_controller.rb:69:in `ensure_no_admins'
app/controllers/application_controller.rb:387:in `block in with_resolved_locale'
app/controllers/application_controller.rb:387:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/missing_avatars.rb:23:in `call'
lib/middleware/turbo_dev.rb:34:in `call'

Entonces necesitarás eliminar la base de datos de otra manera. Puedes buscar en Google cosas sobre postgres (eso es lo que hago cuando necesito hacerlo) o esperar a que alguien que pueda recordarlo publique aquí. La otra opción es ver que el usuario de discourse tiene derechos para eliminar y crear bases de datos.