Após a atualização para Release v2.4.0.beta2 · discourse/discourse · GitHub, quase todos os nossos plugins (ou seja, pré-visualizações de listas de tópicos, eventos, localizações, classificações, etc.) estão apresentando um problema com o método add_to_serializer no plugin.rb.
O uso existente seguia este formato:
add_to_serializer(:serializer, property) { value }
Isso não funciona mais em um ambiente de produção. Ainda funciona em um ambiente de desenvolvimento.
Inicialmente, pensei que pudesse ter algo a ver com a forma como a ativação de plugins é tratada. Como o método _include? do add_to_serializer usa o estado enabled?
if define_include_method
# Não inclua métodos serializados se o plugin estiver desativado
klass.public_send(:define_method, "include_#{attr}?") { plugin.enabled? }
end
No entanto, o uso do sistema enabled_site_setting não parece resolver o problema. Além disso, enabled? parece ainda retornar true por padrão:
def enabled?
@enabled_site_setting ? SiteSetting.get(@enabled_site_setting) : true
end
Para corrigir o problema imediato, alteramos a forma como nossos plugins serializam dados, mas gostaria de entender o que está acontecendo, se possível. Alguém tem alguma ideia sobre o que está ocorrendo aqui?
Isso é altamente incomum, já que usamos isso em pesquisas e elas certamente não estão quebradas. A única coisa que consigo pensar é que elas estavam quebradas na versão beta, mas foram corrigidas na master? Você pode tentar em tests-passed e ver se funcionam?
Vou testar mais a fundo hoje. O uso em enquetes é ligeiramente diferente, pois o método _include? sempre é precedido por um terceiro parâmetro false. Suspeito que o método include? possa ser o problema.
Como você pode ver no plugin.rb, várias modificações são feitas nos serializers.
As modificações nos serializers que não são de categoria parecem estar funcionando, mas as modificações no serializer basic_category só funcionam em desenvolvimento.
Você não encontrará as propriedades da categoria de teste em
Dan está fora, mas essencialmente existem três locais diferentes onde serializamos categorias com quantidades variadas de dados. Veremos se há alguma maneira de eliminar o mixin aqui, o que torna mais difícil de raciocinar.
Obrigado por reportar e insistir nisso. Foi muito difícil identificar o problema; passei algum tempo lendo a estrutura interna do Rails para entendê-lo.
Não deixe de conferir o novo teste se tiver curiosidade sobre como garantimos que isso funcione bem daqui para frente.