Команды `$rake db:*` и инициализация экземпляра Discourse

Прежде всего, спасибо разработчикам за создание такого замечательного приложения!

Я надеюсь, что смогу прояснить вопрос, который меня смущает. У меня было впечатление, что правильный способ использования команд $ rake db:* в Rails 6 для инициализации — это выполнение $ rake db:prepare, но Discourse не инициализируется корректно, если я выполняю $ rake db:prepare в одиночку. И из обсуждений на Meta/здесь я вижу, что prepare, похоже, используется только для инициализации тестовых данных и, возможно, в фоновых задачах, которые выполняются.

Не мог бы кто-нибудь помочь мне понять, является ли $ rake db:migrate единственной командой, необходимой для инициализации базы данных Discourse для миграций БД или инициализации, и почему это так?

Думаю, сначала нужно выполнить db:create, а затем миграцию.

Как сказал Майкл, база данных должна существовать. Я регулярно выполняю

   rake db:drop db:create db:migrate

чтобы сбросить базу данных до чистого состояния (когда забываю сохранить резервную копию чистой установки!).

Думаю, процесс сборки по умолчанию должен выполнять команду db:create, потому что, если я не упускаю какую-то функциональность в моём экземпляре, он, похоже, работает только с предварительной компиляцией ассетов (или чем-то подобным) и миграциями.

После некоторых поисков выяснилось, что это дополнительная информация к ответу, который я искал:

Задачи rake в Discourse переопределяют rails db:migrate. С точки зрения приложений Rails это можно считать нетрадиционным подходом, например, см. этот PR: Add db:prepare rake task. by robertomiranda · Pull Request #35768 · rails/rails · GitHub. Изучая, что делает db:prepare, видно, что она напрямую обращается к ActiveRecord и выполняет ожидаемую настройку базы данных, но не вызывает другие необходимые отдельные задачи db:*, которые можно было бы ожидать, поскольку она переопределяет части, которые должны быть унаследованы от upstream.

Кстати: текущая конфигурация Discourse не позволяет пользователю базы данных Discourse получать повышенные привилегии, поэтому выполнение таких действий, как db:drop и db:create после сборки, потребует небольшого изменения конфигурации по сравнению с тем, что я реализовал.