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ì?
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.