Claro, eu já resolvi isso. Existem alguns outros que deixei de lado e sobre os quais estou inseguro: o que devo fazer com eles? (byebug, ruby-prof, better_errors, rbtrace, gc_tracer, stackprof, memory_profiler)
Dito isso, estamos totalmente bloqueados no Truffle até que o mini_racer funcione, conforme:
O unicorn provavelmente não funcionará no TruffleRuby porque depende do fork, mas na verdade ele é instalado.
O Discourse pode rodar no Puma? Há alguma configuração necessária para isso?
há alguns outros que deixei de lado e sobre os quais tenho dúvidas; o que devo fazer com eles? (byebug, ruby-prof, better_errors, rbtrace, gc_tracer, stackprof, memory_profiler)
Sim, todos parecem ser muito específicos do MRI (até que comecem a suportar diferentes backends), então o ideal é usar platforms: :mri por enquanto.
O better_errors pode funcionar, mas o binding_of_caller ainda não suporta o TruffleRuby.
Esses gems também parecem ser principalmente ferramentas de depuração/desempenho que não parecem necessárias para fazer o aplicativo funcionar.
Sim, precisamos dar uma olhada no mini_racer.
Ficou curioso, por contexto, por que o JS é usado para renderizar Markdown?
Para garantir que o resultado seja exatamente o mesmo quando executado no navegador do cliente?
wasm definitivamente ficaria de fora aqui; o payload seria muito maior, há uma infinidade de problemas de segurança ao fazê-lo funcionar corretamente com CSPs (e preocupações com CORS). A implementação do markdown-it é espetacularmente rápida e extensível, permitindo uma infinidade de plugins e um enorme ecossistema existente.
Apenas mais um contexto sobre o mini_racer. Desde o dia 0 no Discourse, insistimos em um único pipeline para processar o markdown, o que eliminou completamente uma classe muito perigosa de bugs que experimentei no Stack Overflow, onde servidor e cliente falavam dialetos ligeiramente diferentes. Para o Discourse, isso é ainda mais importante porque plugins podem modificar o pipeline. Por exemplo:
é implementado em um plugin (análise de [])
Temos várias “melhorias na qualidade de vida” que obtemos ao usar o Unicorn e confiar no forking, veja:
Especificamente, monitoramos e gerenciamos um processo filho do Sidekiq a partir do processo mestre.
Mas… o Truffle não tem GIL, o Puma já está no Gemfile assim que o mini_racer estiver funcionando, poderíamos colaborar em uma configuração do Truffle que conserve memória, mantendo o Sidekiq e o Puma no mesmo processo. Ou as pessoas poderiam simplesmente iniciar um processo do Sidekiq manualmente. O Puma certamente pode funcionar; fazemos uso extensivo do Rack.hijack, mas isso já é implementado no Puma, Unicorn e Passenger.