I comandi `$rake db:*` e l'inizializzazione di un'istanza Discourse

Innanzitutto, grazie agli sviluppatori per aver creato un’app così eccellente!

Spero di poter chiarire qualcosa che mi ha lasciato perplesso. Ero dell’idea che il modo corretto per utilizzare i comandi $ rake db:* in Rails 6 per l’inizializzazione fosse $ rake db:prepare, ma Discourse non si inizializza correttamente se eseguo solo $ rake db:prepare. Dalle discussioni su Meta/qui, vedo che prepare sembra essere utilizzato solo per inizializzare i dati di test e forse in alcuni task in background che vengono eseguiti.

Potreste aiutarmi a capire se $ rake db:migrate è l’unico comando necessario per inizializzare il database di Discourse per le migrazioni o l’inizializzazione del database e perché è così?

Penso che tu debba prima eseguire db:create, poi fare le migrazioni.

Come ha detto Michael, il database deve esistere. Io regolarmente eseguo

   rake db:drop db:create db:migrate

per ripristinare un database pulito (quando dimentico di salvare un backup di una nuova installazione!).

Credo che il processo di build debba predefinitamente eseguire db:create, perché a meno che non mi stia sfuggendo qualche funzionalità nella mia istanza, questa sembra funzionare solo con precompile degli asset (o qualcosa di simile) e migrate.

Dopo alcune ricerche, sembra che ci siano ulteriori informazioni sulla risposta che stavo cercando:

I task rake di Discourse stanno sovrascrivendo rails db:migrate. Credo che questo possa essere considerato non convenzionale per le applicazioni Rails, ad esempio in questa PR: https://github.com/rails/rails/pull/35768. Esaminando cosa fa db:prepare, si nota che accede direttamente ad ActiveRecord ed esegue la configurazione attesa del database, ma non chiama gli altri task db:* individuali necessari che ci si aspetterebbe, poiché sovrascrive parti che dovrebbero provenire dalla versione upstream.

Nota a margine: il modo in cui ho attualmente configurato Discourse non consente mai all’utente del database di Discourse di ottenere privilegi elevati, quindi dover eseguire operazioni come db:drop e db:create dopo la costruzione sembra richiedere una leggera modifica alla configurazione rispetto a quanto ho implementato.