Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

301
Visualizações
¿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 à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda