NoMethodError: metodo non definito `min_tags_from_required_group'

Ciao team Discourse!

Sto cercando di eseguire Discourse Docker su Ubuntu in versione stabile (v2.8.8) e mi imbatto nel seguente errore:

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)

Informazioni aggiuntive su ciò che ho fatto finora:

Ecco cosa ho fatto finora per arrivare a questo punto:

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

Ho riscontrato alcuni problemi con i segnalibri in precedenza, quindi ho dovuto:

nano db/migrate/20220104053343_add_bookmark_polymorphic_columns.rb

e incollare questo: discourse/db/migrate/20220322024216_add_bookmark_polymorphic_columns.rb at cd817a436574cd00f0bae339ec0c4fe2fcf2bb50 ¡ discourse/discourse ¡ GitHub

Quindi, quando eseguo:

d/boot_dev -p --init

ottengo l’errore relativo a min_tags_from_required_groups.

Qualcuno può aiutarmi?

Si tratta di un’installazione di sviluppo o di un’installazione standard?

Se stai cercando di eseguire in produzione, imposteresti la versione su stable in app.yml. Non cloneresti discourse come hai indicato.

Hai dei plugin?

Ciao @pfaffman,

Grazie per la risposta!

Questa è un’istanza di sviluppo, quindi non ho il file app.yml

Nessun plugin installato, speravo solo di eseguire un’istanza di sviluppo su una versione stabile su Ubuntu.

Ah! Capisco ora. Forse non dovrei postare nel cuore della notte.

C’era un database prima che passassi a stabile? forse devi

  rake db:drop db:create db:migrate

Non dovresti aver bisogno di selezionare una migrazione.

1 Mi Piace

Ciao @pfaffman,

Spero tu abbia passato un fantastico fine settimana! Grazie per aver risposto, lo testerò oggi e ti farò sapere!

1 Mi Piace

Ciao @pfaffman,

Dopo aver eseguito sudo -s e poi d/rake db:drop db:create db:migrate, ho ricevuto il seguente errore:

PG::InsufficientPrivilege: ERRORE:  deve essere il proprietario del database discourse_development
Impossibile eliminare il database 'discourse_development'
rake aborted!
ActiveRecord::StatementInvalid: PG::InsufficientPrivilege: ERRORE:  deve essere il proprietario del database discourse_development


Causato da:
PG::InsufficientPrivilege: ERRORE:  deve essere il proprietario del database discourse_development

Tasks: TOP => db:drop:_unsafe
(Vedi il trace completo eseguendo il task con --trace)

Sono entrato in d/psql e ho ottenuto l’elenco:

discourse-> \l
                                          Elenco dei database
           Nome           |  Proprietario | Codifica |   Collation   |    Ctype    |   Privilegi di accesso    
--------------------------+----------+----------+-------------+-------------+------------------------
 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.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 righe)

Come posso risolvere questo errore?

Hmm. Forse elimina e ricrea tu stesso quei database e migrali con il rake task. Oppure concedi all’utente discourse i diritti di creare e distruggere (penso che sia più facile).

Ciao @pfaffman,

Purtroppo non ho molta familiarità con il processo per concedere all’utente di discourse i diritti di creare e distruggere. Nella prima opzione, però, stai dicendo che dovrei semplicemente eliminare tutti questi database, quindi eseguire d/rake db:create db:migrate? È corretto?

1 Mi Piace

Cerca su Google “postgres user roles” o qualcosa di simile. È quello che faccio. È qualcosa del genere

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

Ma probabilmente è sbagliato

Ciao @pfaffman,

Grazie per il tuo aiuto finora! Voglio solo fare un passo indietro prima di approfondire la risoluzione dei problemi di psql, il mio obiettivo principale è solo eseguire l’ambiente di sviluppo Docker di Discourse (su stabile) su Ubuntu, che funziona bene e come previsto su Mac. Non dovrei essere in grado di farlo senza questi errori di tabella e migrazione? Quando tento un’installazione pulita, ricevo l’errore di segnalibro e, dopo averlo risolto, ricevo questo errore NoMethodError e ora InsufficientPrivilege.

Inizialmente pensavo fosse perché ero su test-passed e poi passare a stabile ha causato il problema, ma anche in un’istanza Ubuntu pulita e vuota, il NoMethodError appare ancora, questo senza alcun DB preesistente, ho appena eseguito il Passaggio n. 1 e il Passaggio n. 2 qui:

Riesci a installare stabile su Ubuntu senza problemi?

Ri-uppo questa discussione! Mi chiedo se qualcun altro sia riuscito a eseguire un ambiente di sviluppo sulla versione stabile di Ubuntu.

Prova

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

Ciao @pfaffman,

Grazie per la tua risposta! Sfortunatamente continuo a riscontrare lo stesso 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)

Ho tentato su un’istanza vuota (riavviata dall’inizio, senza database o informazioni esistenti) utilizzando la guida per principianti e ottengo lo stesso risultato.

Questo è l’errore che ottengo ancora in 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'

Allora dovrai eliminare il database in qualche altro modo. Puoi cercare su Google cose su postgres (è quello che faccio quando devo farlo) o aspettare che qualcuno che se lo ricorda posti qui. L’altra opzione è vedere che l’utente discourse abbia i diritti per eliminare e creare database.