Les commandes `$rake db:*` et l'initialisation d'une instance Discourse

Tout d’abord, merci aux développeurs pour avoir créé une application aussi excellente !

J’espère pouvoir obtenir une clarification sur un point qui me trouble. J’avais l’impression que la méthode correcte pour utiliser les commandes $ rake db:* dans Rails 6 pour l’initialisation était d’exécuter $ rake db:prepare, mais Discourse ne s’initialise pas correctement si j’exécute uniquement $ rake db:prepare. D’après les discussions sur Meta/ici, il semble que prepare ne soit utilisé que pour initialiser les données de test et peut-être dans certaines tâches d’arrière-plan exécutées.

Pourriez-vous s’il vous plaît m’aider à comprendre si $ rake db:migrate est la seule commande nécessaire pour initialiser la base de données de Discourse en vue des migrations ou de l’initialisation, et pourquoi c’est le cas ?

Je pense que vous devez d’abord exécuter db:create, puis effectuer la migration.

Comme Michael l’a dit, la base de données doit exister. Je fais régulièrement :

   rake db:drop db:create db:migrate

pour réinitialiser une base de données neuve (lorsque j’ai oublié de sauvegarder une installation fraîche !).

Je pense que le processus de build doit par défaut exécuter db:create, car sauf si je passe à côté d’une fonctionnalité dans mon instance, celle-ci semble fonctionner uniquement avec le précompilage des assets (ou quelque chose de similaire) et la migration.

Après quelques recherches, il semble que cela apporte plus d’informations sur la réponse que je cherchais :

Les tâches Rake de Discourse remplacent rails db:migrate. Je pense que cela peut être considéré comme non conventionnel pour les applications Rails, par exemple dans cette PR : Add db:prepare rake task. by robertomiranda · Pull Request #35768 · rails/rails · GitHub. En examinant ce que fait db:prepare, il accède directement à ActiveRecord et effectue la configuration de la base de données attendue, mais il n’appelle pas les autres tâches individuelles db:* nécessaires que l’on pourrait s’attendre à voir, car il remplace des parties qui devraient provenir de la version upstream.

Et une note secondaire : la façon dont j’ai actuellement configuré Discourse ne permet pas à l’utilisateur de la base de données Discourse d’obtenir des privilèges élevés. Ainsi, devoir exécuter des commandes comme db:drop et db:create après la construction semble nécessiter un léger changement de configuration par rapport à ce que j’ai mis en œuvre.