Überschreiben Sie bestehende Discourse-Methoden in Plugins

Neu bei Discourse und Rails-Entwicklung. Ich verwende die Dev Container-Umgebung (in VS Code) lokal. Die Anleitungen und Dokumentationen waren hilfreich.

Ich habe mich gefragt, ob jemand Tipps hat, wie man Kern-Discourse-Klassen überschreiben kann, insbesondere wie man sie in einer lokalen Entwicklungsumgebung persistent macht.

In meinem Plugin versuche ich, eine Methode in der Kern-Discourse-Klasse TopicEmbed zu überschreiben (unter Verwendung des allgemeinen Ansatzes, der von @angus oben gut dokumentiert wurde). Es funktioniert einmal, wenn ich VS Code neu baue und neu lade, aber bei nachfolgenden HTTP-Anfragen wird meine Überschreibung nie aufgerufen.

Meine Überschreibung ist in /plugins/my-plugin/app/models/override.rb definiert und ich verwende require_relative, um diese Datei in mein plugin.rb einzubinden.

#override.rb:
class ::TopicEmbed

  # ein Modul, das in TopicEmbed.singleton_class vorangestellt wird
  module TopicEmbedOverrideModule
    # Methode in TopicEmbed
    def first_paragraph_from(html)
      Rails.logger.info(“my override is happening! ”)

      # fahre mit der ursprünglichen Implementierung von TopicEmbed fort.
      super

    end
  end

  # führe das Prepend hier aus
  singleton_class.prepend TopicEmbedOverrideModule
end

Ich vermute, dass diese Herausforderung mit der Persistenz auf meine Entwicklungsumgebung und die Art und Weise, wie Ruby-Code kompiliert/gecacht wird, zurückzuführen sein könnte.
Ich habe auch rm -rf tmp; bin/ember-cli -u und bundle exec rake tmp:cache:clear versucht.