Quería documentar esto aquí por si alguien más está intentando hacer lo mismo y necesita una pequeña guía.
Actualmente estoy trabajando en un frontend de React junto con un backend de Discourse y un plugin que personaliza cierta funcionalidad de Discourse. Quería que MessageBus funcionara con la aplicación frontend personalizada, pero me encontré con un problema de CORS, ya que el frontend se sirve desde un origen diferente al de Discourse.
Noté que Discourse estaba estableciendo la cabecera Access-Control-Allow-Origin en Discourse.base_url_no_prefix para el entorno de MessageBus, ya que naturalmente se asume que MessageBus funcionará con el frontend por defecto de Ember de Discourse.
Como se documenta en el README de MessageBus en GitHub, es posible agregar cabeceras adicionales al entorno de MessageBus, que es exactamente lo que hace el inicializador de MessageBus de Discourse y donde se establece Access-Control-Allow-Origin en Discourse.base_url_no_prefix.
Para personalizarlo, agregué el siguiente código a mi plugin:
MessageBus.extra_response_headers_lookup do |env|
env["__mb"][:extra_headers].merge({
"Access-Control-Allow-Origin" => "http://tu-dominio-personalizado.com"
})
end
Esto tiene la ventaja de no sobrescribir la lógica importante de Discourse al determinar el entorno de MessageBus, que se establece al llamar a setup_message_bus_env en el inicializador de Discourse, mientras que aún permite valores personalizados.
Soy consciente de que esta configuración puede ser bastante obvia para muchos de los desarrolladores aquí, pero pensé que valía la pena documentarla, ya que no siempre es fácil unir todas las piezas. ¡Y si esto ahorra una hora a alguien intentando resolverlo, mejor!
Por supuesto, si algo de lo anterior es incorrecto o inexacto, por favor házmelo saber y lo editaré.