Voglio creare un plugin che abbia le proprie tabelle. Quindi, è una buona idea avere generatori per le migrazioni e i modelli, poiché copiarli manualmente dalla directory principale dell’applicazione può portare a errori ed è semplicemente poco comodo. Ho quindi iniziato a creare i miei generatori. Ho cominciato con il generatore di migrazioni:
Ora potrei procedere e fare lo stesso per i modelli e i controller. Ma ora ho iniziato a leggere questa guida Getting Started with Engines — Ruby on Rails Guides e mi sembra che tutto questo possa essere una duplicazione di sforzi. Perché il generatore di plugin per Discourse si discosta così tanto dal generatore di plugin di Rails?
Il generatore di plugin di Rails crea un bin/rails specifico per il plugin, che abilita i generatori di migrazioni e modelli specifici per il plugin. Sarebbe bello avere qualcosa di simile. Ho provato a creare qualcosa del genere, ma non sono riuscito a farlo funzionare, quindi ho scelto un’altra strada e ho iniziato a creare questi generatori “uniche nel loro genere”. Se avessi compreso meglio le differenze tra il modo in cui Rails e Discourse realizzano i plugin, forse avrei potuto seguire quest’altra strada, che potrebbe risparmiare tempo. Forse qualcuno può approfondire l’argomento. Perché i plugin di Discourse e quelli di Rails sono qualcosa di diverso e perché non si basano l’uno sull’altro?
I plugin di Rails sono diversi dai plugin di Discourse per molte ragioni. I plugin di Discourse devono avere una struttura di cartelle specifica e possono estendere o sovrascrivere il codice Ember del core di Discourse, tra l’altro. Credo che la parte relativa a Rails di un plugin di Discourse sia più simile a un plugin generico di Rails, ma non sono la stessa cosa.
Inoltre, si dovrebbero creare nuove tabelle solo se strettamente necessario. Discourse ha già circa 150 tabelle e non è così frequente che il proprio lavoro non possa essere completato utilizzando una o un paio di esse.
Tuttavia, guardando al futuro, personalmente auspicherei e gradirei che ciò accadesse. Significherebbe che le persone stanno sviluppando plugin enormi e più entusiasmanti, diventando più creative riguardo a ciò che si può realizzare con Discourse.
Ne ho bisogno. Anche le funzionalità di base richiedono tabelle. Ritengo davvero fastidioso che non esista un metodo chiaro e documentato per farlo. Ad esempio, il plugin per i sondaggi utilizza le proprie tabelle, ma non riesco a trovare il generatore per crearle. discourse/plugins/poll at main · discourse/discourse · GitHub
Un altro vantaggio della documentazione è che verranno stabilite convenzioni per i namespace delle tabelle e delle migrazioni. (Ho visto alcune soluzioni davvero macchinose consigliate qui nei forum su come aggiungere migrazioni a un plugin)
Bellissimo! Quindi quale strada intraprendere? Avvicinarsi al generatore di plugin Rails con un proprio bin/rails nella cartella del plugin, oppure creare versioni proprie per tutti i generatori (migrazioni, modelli, controller)?
Devi leggere le guide su come sviluppare plugin disponibili qui. Per la maggior parte dei plugin puoi utilizzare tabelle esistenti (come i campi personalizzati dei post). Ci sono casi in cui hai bisogno di tabelle aggiuntive, ma probabilmente è meglio iniziare con qualcosa di meno complesso.
Ho letto la guida per i principianti sui plugin e questa. C’è altro da consultare? Ho anche esaminato il codice di alcuni plugin. So solo che servono delle tabelle. Esistono anche altri plugin che utilizzano le proprie tabelle. Perché c’è questa ossessione nel non creare nuove tabelle? C’è un costo elevato nel crearle? Soprattutto se sono namespace con il nome del plugin all’inizio, non vedo davvero quali siano gli svantaggi.
Queste qui. Consiglio vivamente di consultare queste risorse prima di fare qualsiasi commento relativo allo sviluppo. Non per dire che non avrai mai bisogno di tabelle personalizzate, ma queste sono comunque essenziali.
questa cosa è semplicemente un archivio chiave-valore di base. Non posso memorizzare relazioni tra tabelle lì. Mi piace SQL. E ho bisogno di usarlo per il plugin che voglio creare.
Posso capire che questo problema riguardi le persone che desiderano creare plugin che “persone non tecniche” possano installare e disinstallare. Io non sono una di quelle persone. Quindi sarei lieto se potessimo tornare all’argomento.
Se l’intento è creare qualcosa che userai solo tu stesso, a mio parere sarebbe probabilmente meglio scrivere un’estensione del browser o un’app desktop invece di un plugin. C’è qualche motivo per cui deve essere per forza un plugin?