Después de actualizar a Release v2.4.0.beta2 · discourse/discourse · GitHub, casi todos nuestros plugins (es decir, vistas previas de listas de temas, eventos, ubicaciones, calificaciones, etc.) han experimentado un problema con el método add_to_serializer en plugin.rb.
El uso existente seguía este formato:
add_to_serializer(:serializer, property) { value }
Esto ya no funciona en un entorno de producción. Todavía funciona en un entorno de desarrollo.
Inicialmente, pensé que podría tener algo que ver con la forma en que se maneja la habilitación de plugins. Como el método _include? de add_to_serializer utiliza el estado enabled?:
if define_include_method
# No incluir métodos serializados si el plugin está deshabilitado
klass.public_send(:define_method, "include_#{attr}?") { plugin.enabled? }
end
Sin embargo, el uso del sistema enabled_site_setting no parece resolver el problema. Además, enabled? parece seguir teniendo como valor predeterminado true de todos modos:
def enabled?
@enabled_site_setting ? SiteSetting.get(@enabled_site_setting) : true
end
Para solucionar el problema inmediato, hemos cambiado la forma en que nuestros plugins serializan los datos; sin embargo, me gustaría llegar al fondo de esto si es posible. ¿Alguien tiene alguna idea sobre lo que está sucediendo aquí?
Esto es muy inusual, ya que lo utilizamos en las encuestas y definitivamente no están rotas. Lo único que se me ocurre es que estuvieran rotas en la versión beta pero se corrigieron en master. ¿Podrías probar en tests-passed y ver si funcionan?
Lo probaré más a fondo hoy. El uso en las encuestas es ligeramente diferente, ya que el método _include? siempre se invoca con un tercer parámetro false. Sospecho que el método include? podría ser el problema.
Como puedes ver en plugin.rb, se realizan varias modificaciones en los serializadores.
Las modificaciones en los serializadores que no son de categorías parecen funcionar correctamente, pero las modificaciones en el serializador basic_category solo funcionan en desarrollo.
No encontrarás las propiedades de la categoría de prueba en:
Dan no está disponible, pero esencialmente hay tres lugares diferentes donde serializamos categorías con cantidades variables de datos. Veremos si hay alguna manera de eliminar el mixin aquí, lo cual hace que esto sea más difícil de razonar.
Gracias por reportarlo y presionar al respecto. Fue un caso muy, muy complicado de resolver; pasé un tiempo leyendo los internos de Rails para dar con esto.
Asegúrate de revisar la nueva prueba si tienes curiosidad por saber cómo nos aseguramos de que esto funcione bien de ahora en adelante.