Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

Hypermodel `after_commit` handler is dropping errors instead of raising

Ouverte
#453 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
35/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
À l'abandon
Stack technique
rails, ruby
Domaine
backend

Piste de recherche

Commencez par la méthode after_commit de Hypermodel et examinez le résultat de SendPacket.run, puis lisez InternalPolicy#send_message pour comprendre comment les erreurs de promise sont gérées. C’est terminé lorsque les erreurs du after-commit broadcast sont levées au lieu d’être ignorées, tandis que le server-not-running rescue reste inchangé.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

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.

Langage dominant
JavaScript
Étoiles
538
Forks
41
Métriques de merge des PR
Aucune PR mergée en 30 j

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de hyperstack-org/hyperstack

Toutes les issues de hyperstack-org/hyperstack

Issues similaires

Plus d'issues JavaScript

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.