Generatore di plugin per Rails

Sembra un buon inizio, a mio avviso. Ora, devo solo imparare a fare cose davvero interessanti con esso.

Il mio primo piano è scrivere del codice per interrogare il database in modo da ottenere un valore necessario dalla tabella post_custom_fields e utilizzarlo nella pagina dei topic per una piccola richiesta avanzata dal nostro team di moderatori esperti.

Domani scaricherò il progetto da git e inizierò a cercare esempi di codice per il database provenienti da altri plugin per prendere il via e vedere fino a dove riesco ad arrivare.

Grazie ancora @j.jaffeux.

Ogni piccolo contributo aiuta, e avere un generatore come questo per i nuovi creatori di plugin di Discourse come me è molto apprezzato. Potete vederlo lì in basso, che implora di essere sviluppato:

Nel corso degli anni ho scritto innumerevoli plugin per vBulletin, quindi sono davvero entusiasta di creare alcuni plugin semplici per Discourse, credetemi.

2 Mi Piace

Ciao @j.jaffeux

Sto ancora cercando di imparare sui plugin di Discourse, quindi oggi sono tornato al generatore di plugin; ho provato questo in un ambiente di sviluppo su macOS, dove l’app funziona correttamente e ho dedicato molto tempo allo studio di Ruby e Rails e alla creazione di piccoli plugin per imparare:

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

Tutto sembra procedere bene e il plugin si installa correttamente:

Screen Shot 2020-08-11 at 1.26.36 PM

Ma quando vado al percorso:

http://localhost:3000/discourse_racoon

Non funziona:

Ho sbagliato a pensare che le rotte del plugin e il controller dovrebbero funzionare OOTB (out of the box) dopo aver generato il plugin di base, in questo caso DiscourseRacoon?

Ho consultato varie risorse online, che indicavano di verificare l’esistenza della rotta; quindi ho controllato routes.rb e ho visto che le rotte sono definite lì; ho anche controllato discourse_racoon_controller.rb e il controller ha un metodo index (azione).

Scusa, sto ancora faticando con lo sviluppo di plugin più interessanti e con Discourse. Cosa sto facendo di sbagliato? Hai qualche suggerimento su quale sia il prossimo passo per risolvere questo problema?

Grazie.

1 Mi Piace

È /discourse-racoon, non /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 Mi Piace

Ciao @j.jaffeux

Grazie!

Era proprio questo.

Immagino sia una convenzione di Rails che devo imparare? Ovvero, che tutte le rotte definite con gli underscore vengono accessibili con i trattini?

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 Mi Piace

Ciao,

Ho generato un plugin “hello world” con questo generatore, aggiunto un sacco di istruzioni Ruby per “scrivere su un file” e osservato il ciclo di vita di Rails. Ho scoperto che i controller di Rails non funzionavano come previsto (non registravano nulla, indicando che venivano ignorati).

Dopo aver effettuato il debug, ho risolto il problema spostando i controller di Rails in una directory superiore.

Inoltre, ho aggiunto un controller e un template Javascript/Ember per la pagina principale, inserito del codice HTML e CSS in tutti i template e aggiunto del codice JS per leggere i cookie e evidenziare i template.

Ad esempio, dopo alcune modifiche al plugin generato dal generatore di plugin Rails:

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

Per tutti i dettagli e gli screenshot, consulta:

Infine, vorrei ringraziare @j.jaffeux per questo generatore di plugin Rails. Mi sono divertito molto a effettuare il debug dei controller di Rails e a modificarlo per fornire più codice da ispezionare, sia per il ciclo di vita di Rails che per i template/controller JS.

Spero che le mie modifiche possano essere utili a chiunque, come me, stia ancora imparando le basi di Discourse nello sviluppo di plugin nel tempo libero e desideri utilizzare il generatore di plugin Rails.

Vedi anche:

Attualmente, mi sto divertendo molto a effettuare il debug e a risolvere plugin non funzionanti come parte del processo di apprendimento dello sviluppo di plugin per Rails e Discourse :slight_smile:

5 Mi Piace

Grazie per aver risolto questo problema, @neounix! Forse questo sarà il vantaggio di cui avevo bisogno per far avanzare il mio progetto.

Ciao @j.jaffeux, spostare quei file è la Soluzione Consigliata, oppure dovrebbero essere inclusi con qualcosa come

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

Penso di aver provato a includerli, ma poi ho ricevuto un errore relativo a un elemento mancante… qualcosa (quindi presumo di aver fatto la cosa sbagliata e non vale la pena documentare esattamente cosa).

EDIT: Sembra che il controller venga effettivamente caricato ed eseguito quando si accede a /plugin-path.

3 Mi Piace

Ciao @pfaffman

Inizialmente ho provato a caricare i controller Ruby con istruzioni load in plugin.rb, ma non venivano registrati come previsto.

Quando ho testato i controller Ruby, ho utilizzato istruzioni Ruby per scrivere nel file system e ho eseguito un tail -f su quel file di log per verificare come i controller vengono attivati.

Per divertimento, ieri ho concluso la giornata scrivendo del codice per leggere tutte le variabili d’ambiente dei processi in un cookie tramite un controller Rails e per inviarle all’app con il controller Ember.

Davvero divertente!

Sono dipendente, LOL

3 Mi Piace

La parte dell’URL si trova sul lato sinistro, il riferimento al codice Ruby sul lato destro di =>. La differenza tra _ e - è definita nella riga mount dell’engine.

4 Mi Piace

In Parte 4 della guida ai plugin di @eviltrout, consiglia di sviluppare il plugin al di fuori del codice di Discourse e di impostare un collegamento simbolico nella directory plugins.

Avrebbe senso aggiungere un’opzione -d ~/path/to/plugin_src per generare il plugin in una directory diversa e, possibilmente, impostare anche il collegamento simbolico?

1 Mi Piace

Mi dispiace, ma potrei deprecare questa opzione e chiudere l’argomento per ora.

Anche se offre meno possibilità di personalizzazione, il nostro metodo preferito per avviare un plugin ora è utilizzare GitHub - discourse/discourse-plugin-skeleton: Template for Discourse plugins · GitHub come modello (vedi il pulsante verde USA QUESTO MODELLO).

Per noi è molto più facile mantenerlo aggiornato.

6 Mi Piace