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

마이그레이션을 체리 피킹할 필요는 없어요.

안녕하세요 @pfaffman,

주말 잘 보내셨나요? 답변 주셔서 감사합니다. 오늘 테스트해보고 다시 알려드릴게요!

Hey @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 사용자에게 생성 및 삭제 권한을 부여하는 방법도 있습니다(이 방법이 더 쉬운 것 같습니다).

Hey @pfaffman,

아쉽게도 discourse 사용자 권한을 부여해서 데이터베이스를 생성하고 삭제하는 과정에 대해 잘 모르겠습니다. 첫 번째 옵션에 대해서는, 이 모든 데이터베이스를 삭제한 다음 d/rake db:create db:migrate를 실행하라는 말씀이신가요? 맞습니까?

Google에서 “postgres user roles” 또는 비슷한 것으로 검색하세요. 저는 그렇게 합니다. 대략 이렇게요

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

하지만 아마도 잘못된 것 같습니다

Hey @pfaffman,

지금까지 도와주셔서 감사합니다! psql 문제를 더 깊이 파고들기 전에 한 발짝 물러서서 상황을 정리하고 싶습니다. 제 주된 목표는 Ubuntu에서 Discourse docker 개발 환경(stable 버전)을 실행하는 것인데, Mac에서는 정상적으로 잘 동작하고 있습니다. 이러한 테이블 및 마이그레이션 오류 없이 이 작업을 수행할 수 있지 않나요? 클린 설치를 시도하면 북마크 오류가 발생하고, 그 문제를 해결한 후에는 NoMethodError가 발생하며, 지금은 InsufficientPrivilege 오류가 발생합니다.

처음에는 test-passed를 사용하다가 stable로 전환하면서 문제가 생긴 줄 알았는데, 이전에 존재하던 데이터베이스가 없는 완전히 깨끗한 Ubuntu 인스턴스에서도 NoMethodError가 여전히 발생합니다. 여기 있는 1단계와 2단계만 수행했을 뿐입니다:

Ubuntu에서 stable 버전을 문제없이 설치할 수 있으신가요?

이 스레드를 다시 올려봅니다! 우분투의 안정 버전에서 개발 환경을 실행하는 데 성공하신 분이 계신지 궁금합니다.

시도해 보세요

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

Hey @pfaffman,

답변 주셔서 감사합니다! 하지만 unfortunately 동일한 문제를 계속 겪고 있습니다:

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에 관한 정보를 구글에서 검색해 볼 수 있습니다(저는 할 일이 생길 때 그렇게 합니다) 아니면, 이 게시판에 올릴 수 있는 누군가가 기억나길 기다릴 수도 있습니다. 다른 옵션은 discourse 사용자가 데이터베이스를 삭제하고 생성할 권한을 가지고 있는지 확인하는 것입니다.