Cambios solicitados para apoyar el discurso sobre TruffleRuby

Me gustaría solicitar los siguientes 3 cambios para ayudar a ejecutar Discourse en TruffleRuby:

Cambio Solicitado
Actualizar bin/rails para deshabilitar unicorn cuando fork no es compatible.

Error

internal:core/kernel.rb:764:in `fork': fork is not available (NotImplementedError)

Archivos
bin/rails

Por qué
TruffleRuby no soporta forking.

Sugerencia
Deshabilitar unicorn si !Process.respond_to?(:fork)

========================================================

Cambio Solicitado
Deshabilitar mini_profiler para TruffleRuby

Error

internal:core/kernel.rb:236:in `gem_original_require': cannot load such file -- stackprof (LoadError)

Archivos
config/initializers/006-mini_profiler.rb

Por qué
Stackprof no es compatible actualmente en TruffleRuby

Sugerencia
Deshabilitar la carga de mini_profiler cuando RUBY_ENGINE es “TruffleRuby”

========================================================

Cambio Solicitado
Evitar que rbtrace se cargue

Usos similares que ya evitan que rb_trace se cargue:

Error
Failure/Error: require ‘rbtrace’

Sugerencia
Utilizar uno de los métodos en los enlaces anteriores para evitar cargar rbtrace

Archivos
spec/rails_helper.rb

Esas parecen solicitudes razonables.

Por cierto: ¿Ha cambiado algo sobre que mini_racer no sea compatible con TruffleRuby? Ese es un bloqueo importante.

Por cierto: ¿Ha cambiado algo sobre mini_racer no ser compatible con TruffleRuby? Ese es un bloqueo importante.

Tengo una rama con la mayor parte de la funcionalidad de mini_racer pasando la suite de pruebas usando GraalJS para TruffleRuby. Creo que maneja toda la funcionalidad necesaria para Discourse. Solo necesita ser revisada y luego intentaré que se fusione. Así es como lo he estado ejecutando localmente: https://twitter.com/brandonfish/status/1486755128577253376

Corrección:
Deshabilitar la carga de mini_profiler cuando RUBY_ENGINE es “truffleruby”

mini_profiler debería seguir funcionando bien, recomendaría que simplemente no carguemos rbtrace / stackprof, etc. Hay dependencias sueltas.

mini_profiler aún puede aportar mucho valor en el mundo de truffle, nada específico de MRI al respecto.

Aquí tienes una PR con los cambios solicitados.

Todavía no he conseguido que funcione correctamente, hubo un java.lang.NullPointerException, pero eso podría ser solo que deshabilité burdamente mini_racer. Tengo muchas ganas de ver un Discourse totalmente funcional ejecutándose en TruffleRuby.

No investigué más a fondo, pero noté un error cuando solo deshabilité la carga de stackprof y memory_profiler. Así que deshabilité completamente mini_profiler por ahora.

2022-05-04 21:48:13 +0200 Rack app ("POST /mini-profiler-resources/results" - (127.0.0.1)): #<SystemStackError: stack level too deep
        from StackOverflowCheckImpl.java:328:in `com.oracle.svm.core.graal.snippets.StackOverflowCheckImpl.newStackOverflowError0'>

Podría haber sido un efecto secundario de otros problemas. Supongo que podríamos investigar cuando se resuelvan otros problemas.