NoMethodError: nicht definierte Methode `min_tags_from_required_group'

Hallo Discourse-Team!

Ich versuche, Discourse Docker unter Ubuntu auf Stable (v2.8.8) auszuführen und stoße auf folgenden Fehler:

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)

Zusätzliche Informationen zu dem, was ich bisher getan habe:

Was ich bisher getan habe, um hierher zu gelangen:

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

Ich stieß früher auf einige Bookmark-Probleme, daher musste ich:

nano db/migrate/20220104053343_add_bookmark_polymorphic_columns.rb

und fügte dies ein: discourse/db/migrate/20220322024216_add_bookmark_polymorphic_columns.rb at cd817a436574cd00f0bae339ec0c4fe2fcf2bb50 · discourse/discourse · GitHub

Dann, wenn ich ausführe:

d/boot_dev -p --init

erhalte ich den Fehler bezüglich min_tags_from_required_groups.

Kann jemand helfen?

Handelt es sich um eine Entwicklunginstallation oder eine Standardinstallation?

Wenn Sie versuchen, auf der Produktionsumgebung auszuführen, würden Sie die Version in Ihrer app.yml auf „stable“ setzen. Sie würden Discourse nicht klonen, wie Sie es angegeben haben.

Haben Sie Plugins?

Hallo @pfaffman ,

Danke für die Antwort!

Dies ist eine Entwicklungsumgebung, daher habe ich keine app.yml.

Es sind keine Plugins installiert. Ich hoffte nur, eine Entwicklungsumgebung auf Stable unter Ubuntu ausführen zu können.

Ah, ich verstehe jetzt. Vielleicht sollte ich nicht mitten in der Nacht posten.

Gab es eine Datenbank, bevor Sie zu Stable gewechselt sind? Vielleicht müssen Sie

  rake db:drop db:create db:migrate

Sie müssen keine Migration manuell auswählen.

1 „Gefällt mir“

Hallo @pfaffman ,

Ich hoffe, du hattest ein tolles Wochenende! Danke für deine Antwort, ich werde das heute testen und mich bei dir melden!

1 „Gefällt mir“

Hallo @pfaffman ,

Nachdem ich sudo -s und dann d/rake db:drop db:create db:migrate ausgeführt hatte, erhielt ich folgende Fehlermeldung:

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)

Ich ging in d/psql und erhielt die Liste:

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)

Wie kann ich diesen Fehler beheben?

Hmm. Löschen und erstellen Sie diese Datenbanken vielleicht einfach selbst neu und migrieren Sie sie mit der Rake-Aufgabe. Oder geben Sie dem Discourse-Benutzer die Rechte zum Erstellen und Zerstören (ich glaube, das ist einfacher).

Hallo @pfaffman,

Ich bin nicht sehr vertraut mit dem Prozess, dem Discourse-Benutzer leider die Rechte zum Erstellen und Löschen zu geben. Meinst du bei der ersten Option, dass ich einfach alle diese Datenbanken löschen und dann d/rake db:create db:migrate ausführen soll? Ist das richtig?

1 „Gefällt mir“

Google mal nach „postgres user roles“ oder so etwas. Das mache ich. Es ist so etwas wie das hier

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

Aber das ist wahrscheinlich falsch

Hallo @pfaffman,

Vielen Dank für deine bisherige Hilfe! Ich möchte einen Schritt zurücktreten, bevor ich tiefer in die Fehlerbehebung von psql eintauche. Mein Hauptziel ist es, die Discourse Docker-Entwicklungsumgebung (auf Stable) unter Ubuntu auszuführen, was unter Mac problemlos und wie erwartet funktioniert. Sollte ich das nicht ohne diese Tabellen- und Migrationsfehler tun können? Wenn ich versuche, eine Neuinstallation durchzuführen, erhalte ich den Bookmark-Fehler, und nachdem ich diesen behoben habe, erhalte ich diesen NoMethodError und jetzt den InsufficientPrivilege-Fehler.

Anfangs dachte ich, es lag daran, dass ich auf test-passed war und der Wechsel zu Stable das Problem verursachte, aber selbst in einer sauberen, leeren Ubuntu-Instanz tritt der NoMethodError immer noch auf. Dies geschieht ohne vorhandene vorherige Datenbanken. Ich habe gerade Schritt #1 und Schritt #2 hier durchgeführt:

Kannst du Stable ohne Probleme unter Ubuntu installieren?

Diesen Thread hochschieben! Ich frage mich, ob es jemand anderem gelingt, eine Entwicklungsumgebung auf der stabilen Version von Ubuntu auszuführen.

Versuchen Sie

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

Hallo @pfaffman,

Vielen Dank für deine Antwort! Leider stoße ich immer wieder auf dasselbe Problem:

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)

Ich habe dies auf einer leeren Instanz (von vorne begonnen, keine vorhandenen Datenbanken oder Informationen) unter Verwendung der Anleitung für Anfänger versucht und erhalte dasselbe Ergebnis.

Dies ist der Fehler, den ich immer noch in d/rails s erhalte

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'

Dann müssen Sie die Datenbank auf andere Weise löschen. Sie können nach Dingen über Postgres googeln (das mache ich, wenn ich es tun muss) oder darauf warten, dass jemand, der sich erinnert, hier postet. Die andere Möglichkeit ist zu prüfen, ob der Discourse-Benutzer die Rechte zum Löschen und Erstellen von Datenbanken hat.