Remplacer les méthodes Discourse existantes dans les plugins

Nouveau dans le développement de Discourse et Rails. J’utilise l’environnement Dev Container (dans VS Code) localement. Les guides et la documentation ont été utiles.

Je me demandais si quelqu’un avait des conseils sur la façon de remplacer les classes principales de Discourse, en particulier pour que cela persiste dans un environnement de développement local.

Dans mon plugin, j’essaie de remplacer une méthode dans la classe principale de Discourse TopicEmbed. (en utilisant l’approche générale bien documentée par @angus ci-dessus.) Cela fonctionne une fois lorsque je reconstruis et recharge VS Code, mais lors des requêtes http suivantes, mon remplacement n’est jamais appelé.

Mon remplacement est défini dans /plugins/my-plugin/app/models/override.rb et j’utilise require_relative pour inclure ce fichier dans mon plugin.rb.

#override.rb :
class ::TopicEmbed

  # un module qui sera préfixé dans la singleton_class de TopicEmbed.
  module TopicEmbedOverrideModule
    # méthode dans TopicEmbed
    def first_paragraph_from(html)
      Rails.logger.info(“mon remplacement se produit ! ”)

      # continuer avec l'implémentation originale fournie par TopicEmbed.
      super

    end
  end

  # faire le préfixe ici
  singleton_class.prepend TopicEmbedOverrideModule
end

Je soupçonne que ce défi de persistance peut être dû à mon environnement de développement et à la façon dont le code ruby est compilé/mis en cache.
J’ai également essayé rm -rf tmp; bin/ember-cli -u et bundle exec rake tmp:cache:clear.