Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

298
Views
¿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
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!