Os comandos `$rake db:*` e inicializando uma instância do Discourse

Primeiramente, obrigado aos desenvolvedores por criarem um aplicativo tão excelente!

Espero poder esclarecer algo que me deixou confuso. Eu tinha a impressão de que a maneira correta de usar os comandos $ rake db:* no Rails 6 para inicialização era executando $ rake db:prepare, mas o Discourse não inicializa corretamente se eu executar apenas $ rake db:prepare. E, pelas discussões no Meta/aqui, vejo que o prepare parece ser usado apenas para inicializar dados de teste e talvez em algum lugar nas tarefas em segundo plano que são executadas.

Alguém poderia, por favor, me ajudar a entender se $ rake db:migrate é o único comando necessário para inicializar o banco de dados do Discourse para migrações ou inicializações do banco de dados e por que isso é o caso?

Acho que você precisa primeiro db:create e depois fazer a migração.

Como o Michael disse, o banco de dados precisa existir. Eu costumo executar

   rake db:drop db:create db:migrate

para redefinir para um banco de dados novo (quando esqueço de fazer um backup de uma instalação limpa!).

Acho que o processo de build deve estar configurado para executar db:create por padrão, pois, a menos que eu esteja perdendo alguma funcionalidade na minha instância, ela parece estar funcionando apenas com o precompilamento de assets (ou algo similar) e a migração.

Após algumas investigações, parece que há mais informações sobre a resposta que eu procurava:

As tarefas rake do Discourse estão sobrescrevendo o rails db:migrate. Acredito que isso possa ser considerado não ortodoxo em aplicações Rails, por exemplo, neste PR: Add db:prepare rake task. by robertomiranda · Pull Request #35768 · rails/rails · GitHub. Analisando o que o db:prepare faz, ele acessa diretamente o ActiveRecord e realiza a configuração esperada do banco de dados, mas não chama as outras tarefas individuais db:* necessárias que se esperaria, pois sobrescreve partes que deveriam vir da versão upstream.

E uma observação lateral: a maneira como configurei o Discourse atualmente não permite que o usuário do banco de dados do Discourse tenha privilégios elevados, então ter que executar coisas como db:drop e db:create após a construção parecerá exigir uma pequena alteração na configuração em relação ao que implementei.