NoMethodError: undefined method `min_tags_from_required_group'

Привет, команда Discourse!

Я пытаюсь запустить Discourse Docker на Ubuntu стабильной версии (v2.8.8), но сталкиваюсь со следующей ошибкой:

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.

Ах! Теперь я понял. Возможно, мне не стоит писать посреди ночи.

Была ли база данных до перехода на стабильную версию? Возможно, вам нужно выполнить:

  rake db:drop db:create db:migrate

Вам не следует выбирать миграцию вручную.

Привет @pfaffman,

Надеюсь, у тебя были отличные выходные! Спасибо за ответ, я протестирую это сегодня и вернусь к тебе с результатами!

Привет @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? Так ли это?

Поищите в Google “postgres user roles” или что-то в этом роде. Я так и делаю. Это что-то вроде этого:

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

Но, скорее всего, это неверно.

Привет, @pfaffman,

Спасибо за помощь до сих пор! Я хочу немного отступить перед тем, как углубляться в устранение неполадок psql. Моя основная цель — просто запустить окружение разработки Discourse в Docker (версия stable) на Ubuntu. На Mac всё работает отлично и как ожидается. Разве я не должен иметь возможность сделать это без ошибок таблиц и миграций? При попытке чистой установки я получаю ошибку с закладками, после её устранения возникает NoMethodError, а теперь ещё и ошибка InsufficientPrivilege.

Сначала я подумал, что проблема в том, что я переключился с ветки test-passed на stable, но даже на чистой пустой установке Ubuntu ошибка NoMethodError всё равно появляется. Это происходит без каких-либо предыдущих баз данных — я выполнил только шаги #1 и #2 из этого руководства:

Удалось ли вам установить стабильную версию на Ubuntu без каких-либо проблем?

Поднимаю эту тему! Интересно, удалось ли кому-то ещё запустить среду разработки на стабильной версии в 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)

Я пытался выполнить это на чистой установке (начал заново, без существующих баз данных или информации), следуя руководству для начинающих, но получил тот же результат.

Вот ошибка, которую я всё ещё получаю при запуске 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'

Тогда вам придется удалить базу данных другим способом. Вы можете поискать в Google информацию о PostgreSQL (я так делаю, когда мне нужно это сделать) или подождать, пока кто-то вспомнит и напишет здесь. Другой вариант — убедиться, что пользователь discourse имеет права на удаление и создание баз данных.