NoMethodError: `min_tags_from_required_group' という未定義のメソッド

Discourseチームの皆さん!

Ubuntuのstable (v2.8.8)でDiscourse Dockerを実行しようとしていますが、以下のエラーが発生しています。

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)

これまでに実施したことに関する追加情報:

ここに至るまでに実施したこと:

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

以前、ブックマークに関する問題が発生したため、以下の操作を行いました:

nano db/migrate/20220104053343_add_bookmark_polymorphic_columns.rb

そして、こちらを貼り付けました:discourse/db/migrate/20220322024216_add_bookmark_polymorphic_columns.rb at cd817a436574cd00f0bae339ec0c4fe2fcf2bb50 · discourse/discourse · GitHub

その後、以下を実行すると:

d/boot_dev -p --init

min_tags_from_required_groupsに関するエラーが発生します。

どなたか支援していただけますでしょうか?

これは開発環境のインストールですか、それとも標準のインストールですか?

本番環境で実行しようとしている場合は、app.yml でバージョンを stable に設定します。指示されたように discourse をクローンすることはありません。

プラグインはありますか?

@pfaffman

ご返信ありがとうございます!

こちらは開発インスタンスのため、app.yml がありません。

プラグインはインストールされておらず、Ubuntu 上の stable で開発インスタンスを実行したいと考えていました。

ああ、わかりました。夜中に投稿すべきではなかったかもしれません。

安定版に切り替える前にデータベースはありましたか?おそらく、次を実行する必要があるでしょう。

  rake db:drop db:create db:migrate

マイグレーションをチェリーピックする必要はないはずです。

「いいね!」 1

@pfaffman

週末はいかがでしたでしょうか。ご返信ありがとうございます。本日テストして、またご連絡いたします。

「いいね!」 1

こんにちは @pfaffman さん

sudo -s を実行してから d/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


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)

d/psql に入ってリストを取得しました。

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)

このエラーを解決するにはどうすればよいでしょうか?

うーん。データベースを自分で削除して再作成し、rakeタスクで移行するだけかもしれません。または、discourseユーザーに作成および破棄の権限を与える(それが一番簡単だと思います)。

@pfaffman さん、

残念ながら、Discourse ユーザーに作成および削除権限を付与するプロセスについてはあまり詳しくありません。最初の選択肢ですが、これらのデータベースをすべて削除してから d/rake db:create db:migrate を実行するように言っていますか?それで正しいですか?

「いいね!」 1

Googleで「postgres user roles」やそれに類するものを検索します。こんな感じです。

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

でも、おそらく間違っているでしょう。

@pfaffman さん、

これまでのご協力ありがとうございます!psql のトラブルシューティングをさらに進める前に、一歩立ち止まりたいと思います。私の主な目的は、Ubuntu 上で Discourse の Docker 開発環境(stable)を実行することです。これは Mac では問題なく期待どおりに動作します。これらのテーブルとマイグレーションのエラーなしで実行できるはずではないでしょうか?クリーンインストールを試みると、ブックマークのエラーが発生し、それを解決した後、この NoMethodError が発生し、現在は InsufficientPrivilege エラーが発生しています。

当初は test-passed を使用していたため、stable に切り替えたことが原因だと考えていましたが、クリーンで空の Ubuntu インスタンスでも、NoMethodError が発生します。これは、既存の DB がない状態でも発生します。ここでは、ステップ #1 とステップ #2 を実行しただけです。

あなたは Ubuntu 上で stable を問題なくインストールできますか?

このスレッドを上げます!Ubuntuの安定版で開発者環境を実行することに成功した方が他にいるか知りたいです。

試してください

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

こんにちは @pfaffman さん

ご返信ありがとうございます!残念ながら、同じ問題が繰り返し発生しています。

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)

初心者向けガイドを使用して、空のインスタンス(既存のDBや情報なしで最初からやり直した状態)で試しましたが、結果は同じでした。

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'

それなら、別の方法でデータベースを削除する必要があります。Postgres については Google で検索するか (私もそうしています)、覚えている人が投稿するのを待ってください。もう 1 つの選択肢は、discourse ユーザーがデータベースを削除および作成する権限を持っているかどうかを確認することです。