Tengo un problema con la última versión de ruby 3.1.1p18, Rails 7.0.2.2, Minitest 5.15.0 y mongo 2.17
El problema es que las llamadas de mongo se sincronizan, lo que en minitest se llama en el contexto de una trampa de Ruby (controlador de señales). Esto provoca el siguiente error:
/home/deployer/.bundle/ruby/3.1.0/gems/concurrent-ruby-1.1.9/lib/concurrent-ruby/concurrent/collection/map/non_concurrent_map_backend.rb:21: warning: Exception in finalizer #<Proc:0x00007f4d81d10e90 bundle/ruby/3.1.0/gems/mongo-2.17.0/lib/mongo/cursor.rb:114> bundle/ruby/3.1.0/gems/mongo-2.17.0/lib/mongo/cluster/reapers/cursor_reaper.rb:59:in `synchronize': can't be called from trap context (ThreadError) from bundle/ruby/3.1.0/gems/mongo-2.17.0/lib/mongo/cluster/reapers/cursor_reaper.rb:59:in `schedule_kill_cursor'q from bundle/ruby/3.1.0/gems/mongo-2.17.0/lib/mongo/cluster.rb:350:in `block (2 levels) in <class:Cluster>' from bundle/ruby/3.1.0/gems/mongo-2.17.0/lib/mongo/cursor.rb:115:in `block in finalize'Hay una pregunta de stackoverflow que aborda la causa raíz de este problema:
Controlador MongoDB Ruby - 'sincronizar': no se puede llamar desde el contexto de trampa que dice que no se puede llamar a sincronizar en lugar de una trampa ('?') hacer ... fin.
Sin embargo, los 2 problemas principales parecen ser que
Minitest atrapa señales vía
Controlador de señales: https://github.com/seattlerb/minitest/blob/fe3992e85b40792cf7bff2a876887d8d9e392068/lib/minitest.rb#L368
Rails atrapa señales a través de: https://github.com/rails/rails/blob/f95c0b7e96eb36bc3efc0c5beffbb9e84ea664e4/railties/lib/rails/cli.rb#L10 & https://github.com/rails/rails/blob/346ae79d5a11152f508df8d5506f8a04b/railddb /lib/rails/commands/server/server_command.rb#L33
Podría parchear Rails y minitest para dejar de atrapar, lo que se siente muy mal y contraproducente en algunos casos.
Intentar modificar el código del controlador Mongo Ruby es contraproducente, ya que eso implicaría que el enhebrado es imposible bajo los rieles y minitest porque el código allí PUEDE usar enhebrado
Alguien tiene alguna opinión? ¿Cómo salir de este catch-22 entre hilos y trampas?
¡Gracias de antemano!
-Daniel