Dopo l’aggiornamento a Release v2.4.0.beta2 · discourse/discourse · GitHub, quasi tutti i nostri plugin (ad esempio anteprime dell’elenco degli argomenti, eventi, posizioni, valutazioni, ecc.) stanno riscontrando un problema con il metodo add_to_serializer di plugin.rb.
L’utilizzo esistente seguiva questo formato:
add_to_serializer(:serializer, property) { value }
Questo non funziona più in un ambiente di produzione. Funziona ancora in un ambiente di sviluppo.
Inizialmente, pensavo che potesse essere correlato al modo in cui viene gestito l’abilitazione dei plugin. Poiché il metodo _include? di add_to_serializer utilizza lo stato enabled?
if define_include_method
# Non includere i metodi serializzati se il plugin è disabilitato
klass.public_send(:define_method, "include_#{attr}?") { plugin.enabled? }
end
Tuttavia, l’utilizzo del sistema enabled_site_setting non sembra risolvere il problema. Inoltre, enabled? sembra comunque predefinito su true
def enabled?
@enabled_site_setting ? SiteSetting.get(@enabled_site_setting) : true
end
Per risolvere il problema immediato, abbiamo modificato il modo in cui i nostri plugin serializzano i dati, ma vorrei capire cosa sta succedendo se possibile. Qualcuno ha qualche idea su cosa stia accadendo?
Questo è altamente insolito, dato che lo utilizziamo nei sondaggi e questi non sono certamente rotti. L’unica cosa a cui posso pensare è che fossero rotti nella versione beta ma riparati nel master? Puoi provare su tests-passed e vedere se funzionano?
Lo testerò ulteriormente oggi. L’uso nei sondaggi è leggermente diverso, poiché il metodo _include? viene sempre preceduto da un terzo parametro false. Sospetto che il metodo include? possa essere il problema.
Come puoi vedere nel file plugin.rb, vengono apportate diverse modifiche ai serializzatori.
Le modifiche ai serializzatori non relativi alle categorie sembrano funzionare, ma le modifiche al serializzatore basic_category funzionano solo in ambiente di sviluppo.
Non troverai le proprietà della categoria di test in
Dan non c’è, ma in sostanza ci sono tre diversi luoghi in cui serializziamo le categorie con quantità variabili di dati. Vedremo se esiste un modo per eliminare il mixin qui, il che rende tutto più difficile da analizzare.
Grazie per aver segnalato e sollecitato la questione: è stata davvero molto complessa da individuare. Ho dedicato del tempo a studiare gli interni di Rails per capire il problema.
Se sei curioso di sapere come ci assicuriamo che questo funzioni correttamente in futuro, dai un’occhiata al nuovo test.