Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

293
Vistas
¿Cómo no se puede usar el controlador Ruby Mongo en un contexto de SEÑAL/trampa, rieles (más reciente) y minitest (más reciente) ambos trampa?

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

over 4 years ago · Santiago Trujillo
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda