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.