Rails-Plugin-Generator

Das sieht für mich nach einem guten Start aus. Jetzt muss ich nur noch lernen, wirklich coole Dinge damit zu machen.

Mein erster Plan ist es, Code zu schreiben, der die Datenbank abfragt, um einen Wert aus der Tabelle post_custom_fields zu erhalten, den ich auf der Themen-Seite für eine kleine Anforderung unseres erfahrenen Moderator-Teams verwenden kann.

Morgen werde ich es aus Git pullen und nach Beispiel-Code für Datenbanken aus anderen Plugins suchen, um einen Einstieg zu finden und zu sehen, wie weit ich komme.

Nochmals vielen Dank @j.jaffeux

Jeder kleine Schritt zählt, und ein Generator wie dieser für Anfänger wie mich, die Discourse-Plugins entwickeln, wird sehr geschätzt. Ihr könnt ihn dort unten sehen, der darauf wartet, entwickelt zu werden:

Im Laufe der Jahre habe ich unzählige Plugins für vBulletin geschrieben, daher bin ich wirklich aufgeregt, einfache Plugins für Discourse zu entwickeln, glaubt mir.

2 „Gefällt mir“

Hallo @j.jaffeux,

Ich versuche immer noch, mehr über Discourse-Plugins zu lernen. Heute bin ich wieder zu diesem Plugin-Generator zurückgekehrt und habe dies in einer Entwicklungsumgebung unter macOS ausprobiert, wo die App einwandfrei läuft. Ich habe mich intensiv mit Ruby und Rails auseinandergesetzt und kleine Plugins erstellt, um dazuzulernen:

# cd /var/Tim/Discourse/plugins
# rails g plugin DiscourseRacoon
# bundle exec 'rails s'

Alles scheint gut zu laufen, und das Plugin wird problemlos installiert:

Screen Shot 2020-08-11 at 1.26.36 PM

Aber wenn ich zur Route gehe:

http://localhost:3000/discourse_racoon

funktioniert es nicht:

Habe ich falsch verstanden, dass die Plugin-Routen und der Controller nach der Generierung des Basis-Plugins (in diesem Fall DiscourseRacoon) sofort (OOTB) funktionieren sollten?

Ich habe verschiedene Online-Ressourcen konsultiert, die darauf hinweisen, dass man prüfen sollte, ob die Route existiert. Also habe ich routes.rb überprüft – dort sind Routen definiert – und auch discourse_racoon_controller.rb, wo der Controller eine index-Methode (Aktion) besitzt.

Entschuldigung, ich kämpfe immer noch mit der interessanteren Plugin-Entwicklung und Discourse. Was mache ich falsch? Hast du einen Vorschlag, wie ich als Nächstes vorgehen sollte, um das Problem zu debuggen?

Vielen Dank.

1 „Gefällt mir“

Es ist /discourse-racoon, nicht /discourse_racoon

rake routes | grep racoon

                         discourse_racoon          /discourse-racoon                                                           DiscourseRacoon::Engine
        GET  /                      discourse_racoon/discourse_racoon#index
actions GET  /actions(.:format)     discourse_racoon/actions#index
        GET  /actions/:id(.:format) discourse_racoon/actions#show
5 „Gefällt mir“

Hallo @j.jaffeux

Danke!

Das war’s.

Ich nehme an, das ist eine Rails-Konvention, die ich lernen muss? Dass alle mit Unterstrichen definierten Routen mit Bindestrichen aufgerufen werden?

DiscourseRacoon::Engine.routes.draw do
  get "/" => "discourse_racoon#index", constraints: DiscourseRacoonConstraint.new
  get "/actions" => "actions#index", constraints: DiscourseRacoonConstraint.new
  get "/actions/:id" => "actions#show", constraints: DiscourseRacoonConstraint.new
end
1 „Gefällt mir“

Hey,

Ich habe mit diesem Generator ein Hello-World-Plugin erstellt, eine Reihe von Ruby-Anweisungen zum Schreiben in eine Datei hinzugefügt und den Rails-Lebenszyklus beobachtet. Dabei stellte ich fest, dass die Rails-Controller nicht wie erwartet funktionierten – sie protokollierten nichts, was darauf hindeutete, dass sie ignoriert wurden.

Nach dem Debuggen habe ich dies erreicht, indem ich die Rails-Controller ein Verzeichnis nach oben verschoben habe.

Zusätzlich habe ich einen JavaScript/Ember-Controller und eine Vorlage für die Hauptindexseite hinzugefügt, HTML und CSS zu allen Vorlagen hinzugefügt und JavaScript-Code geschrieben, um Cookies auszulesen und die Vorlagen hervorzuheben.

Zum Beispiel, nach einigen Änderungen am Plugin, das vom Rails-Plugin-Generator erstellt wurde:

http://localhost:3000/hello-world/

Für vollständige Details und Screenshots siehe:

Abschließend möchte ich mich bei @j.jaffeux für diesen Rails-Plugin-Generator bedanken. Es hat mir großen Spaß gemacht, die Rails-Controller zu debuggen, und ich habe es genossen, sie so zu modifizieren, dass mehr Code bereitgestellt wird, um sowohl den Rails-Lebenszyklus als auch die JS-Vorlagen/Controller zu untersuchen.

Ich hoffe, meine Änderungen helfen anderen, die wie ich noch die Grundlagen von Discourse in der Plugin-Entwicklung in ihrer Freizeit lernen und den Rails-Plugin-Generator nutzen möchten.

Siehe auch:

Derzeit macht es mir großen Spaß, kaputte Plugins im Rahmen des Lernprozesses für die Rails- und Discourse-Plugin-Entwicklung zu debuggen und zu reparieren :slight_smile:

5 „Gefällt mir“

Danke, dass du das herausgefunden hast, @neounix! Vielleicht ist das genau der Schub, den ich brauche, um mein Projekt voranzubringen.

Hey @j.jaffeux, ist das Verschieben dieser Dateien die empfohlene Lösung, oder sollten sie stattdessen mit etwas wie

  load File.expand_path('some-path-here', __dir__) 

eingeschlossen werden?

Ich glaube, ich habe versucht, sie einzubinden, aber dann trat ein Fehler wegen eines fehlenden … irgendetwas auf (also gehe ich davon aus, dass ich etwas falsch gemacht habe und es nicht lohnt, genau zu dokumentieren, was genau).

EDIT: Es sieht so aus, als würde der Controller tatsächlich geladen/ausgeführt, wenn man /plugin-path aufruft.

3 „Gefällt mir“

Hey @pfaffman

Ich habe ursprünglich versucht, die Ruby-Controller mit load-Anweisungen in plugin.rb zu laden, aber sie wurden nicht wie erwartet geloggt.

Beim Testen der Ruby-Controller habe ich Ruby-Anweisungen verwendet, um ins Dateisystem zu loggen, und eine tail -f auf dieser Logdatei ausgeführt, um zu prüfen, wie die Controller feuern.

Zur Abwechslung habe ich gestern am Ende des Tages noch Code geschrieben, der alle Prozess-ENV-Variablen in ein Cookie mit einem Rails-Controller liest und sie mit dem Ember-Controller in die App schreibt.

Echt spaßig!

Ich bin süchtig, LOL

3 „Gefällt mir“

Der URL-Teil steht auf der linken Seite, der Ruby-Code-Bezug auf der rechten Seite von =>. Das _ im Vergleich zu - wird in der Engine-mount-Zeile definiert.

4 „Gefällt mir“

In Teil 4 von @eviltrouts Plugin-Anleitung empfiehlt er, das Plugin außerhalb des Discourse-Quellcodes zu entwickeln und in dem Verzeichnis plugins eine symbolische Verknüpfung einzurichten.

Wäre es sinnvoll, eine Option -d ~/path/to/plugin_src hinzuzufügen, um das Plugin in einem anderen Verzeichnis zu generieren und möglicherweise auch die symbolische Verknüpfung einzurichten?

1 „Gefällt mir“

Es tut mir leid, aber ich werde dies möglicherweise veralten lassen und das Thema vorerst schließen.

Obwohl es in Bezug auf Anpassungen weniger leistungsfähig ist, ist unsere bevorzugte Methode, ein Plugin zu starten, die Verwendung von GitHub - discourse/discourse-plugin-skeleton: Template for Discourse plugins · GitHub als Vorlage (siehe den grünen Button DIESE VORLAGE VERWENDEN).

Für uns ist es viel einfacher, dies aktuell zu halten.

6 „Gefällt mir“