Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Hypermodel `after_commit` handler is dropping errors instead of raising

Abierto
#453 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
35/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Estancado
Stack tecnológico
rails, ruby
Área
backend

Línea de trabajo

Comienza en el método after_commit de Hypermodel e inspecciona el resultado de SendPacket.run; después, lee InternalPolicy#send_message para entender cómo se gestionan los errores de las promesas. Se considera terminado cuando los errores del after-commit broadcast se propagan en lugar de descartarse, mientras que el server-not-running rescue permanece sin cambios.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

in the after_commit method of hypermodel, the SendPacket operation is run which will return a promise, but it is not checked for an error state.

def self.after_commit(operation, model)
  # Calling public_columns_hash once insures all policies are loaded
  # before the first broadcast.
  @public_columns_hash ||= ActiveRecord::Base.public_columns_hash
  Hyperstack::InternalPolicy.regulate_broadcast(model) do |data|
    puts "Broadcast aftercommit hook: #{data}" if Hyperstack::Connection.show_diagnostics

    if !Hyperstack.on_server? && Hyperstack::Connection.root_path
      send_to_server(operation, data, model.__synchromesh_update_time) rescue nil # fails if server no longer running so ignore
    else
      SendPacket.run(data, operation: operation, updated_at: model.__synchromesh_update_time)
    end
  end
rescue ActiveRecord::StatementInvalid => e
  raise e unless e.message == "Could not find table 'hyperstack_connections'"
end unless RUBY_ENGINE == 'opal'

The line containing SendPacket should be

SendPacket.run(data, operation: operation, updated_at: model.__synchromesh_update_time).tap { |p| raise p.error if p.error }

The easiest way to patch this is by adding this:

module Hyperstack
  class InternalPolicy
    alias original_send_message send_message
    def send_message(*args, &block)
      original_send_message(*args, &block).tap { |p| raise p.error if p.is_a?(Promise) && p.error }
    end  
  end
end

This will catch the error with the smallest patch. Note the patch needs to check if its a promise, but the actual fix does not.

Lenguaje dominante
JavaScript
Estrellas
538
Forks
41
Métricas de merge de PR
Sin PR fusionados en 30 d

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de hyperstack-org/hyperstack

Todos los issues de hyperstack-org/hyperstack

Issues similares

Más issues de JavaScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.