[RUBY] Que faire lorsque vous souhaitez connaître la position source où la méthode est définie dans binding.pry

introduction

En lisant le code ruby

Parfois, j'utilise un débogueur.

Cependant, dans de rares cas, je voulais entrer dans une méthode, mais la description que je pensais être un argument de cette méthode était en fait un autre appel de méthode, et je ne pouvais pas comprendre l'arbre des appels.

À ce moment-là, source_location qui se développe dans class Method J'ai finalement eu l'idée d'utiliser la méthode, alors notez-la.

Pause

Un exemple de recherche de la cause d'une tentative de remplacement du client redis utilisé dans ʻActiveSupport :: Cache :: RedisCacheStorepar un simulacre lorsque rspec est exécuté, mais la méthodewith` est manquante.

Ligne 345 devient method_missing avec redis.with. En regardant la gemme redis, il semble que «avec» ne soit pas défini. Je me demande quoi.

From: /bundle/gems/activesupport-6.0.3.2/lib/active_support/cache/redis_cache_store.rb:344 ActiveSupport::Cache::Strategy::LocalCache#read_entry:

    339:         # Store provider interface:
    340:         # Read an entry from the cache.
    341:         def read_entry(key, **options)
    342:           failsafe :read_entry do
    343:             binding.pry
 => 344:             raw = options&.fetch(:raw, false)
    345:             deserialize_entry(redis.with { |c| c.get(key) }, raw: raw)
    346:           end
    347:         end
    348:
    349:         def read_multi_entries(names, **options)

Arrêtez de remplacer la maquette, réexécutez et essayez d'afficher la source.

[1] pry(#<ActiveSupport::Cache::RedisCacheStore>)> redis.method(:with).source
=> "      def with\n        yield self\n      end\n"

Quelle est cette méthode? Dans un tel cas, source_location!

[2] pry(#<ActiveSupport::Cache::RedisCacheStore>)> redis.method(:with).source_location
=> ["/bundle/gems/activesupport-6.0.3.2/lib/active_support/cache/redis_cache_store.rb", 24]

C'est ici? https://github.com/rails/rails/blob/fbe2433be6e052a1acac63c7faf287c52ed3c5ba/activesupport/lib/active_support/cache/redis_cache_store.rb#L24-L26

Est-il facile à utiliser en incluant ConnectionPoolLike et en appliquant un correctif à Redis? Je me demande si je dois inclure ConnectionPoolLike dans le client redis qui est branché avec un simulacre. Si l'implémentation d'ActiveSupport change, je me demande si je peux la suivre correctement.

Comme.

Q

Si les classes sont ouvertes à divers endroits et que le comportement peut être modifié, il peut être difficile de le remarquer simplement en lisant la source. Fini.

Recommended Posts

Que faire lorsque vous souhaitez connaître la position source où la méthode est définie dans binding.pry
Qu'est-ce que CHECKSTYLE: OFF trouvé dans la source Java? Checkstyle à savoir de
Que faire si l'opération non autorisée s'affiche lors de l'exécution d'une commande dans le terminal
Que trouve-t-on ... (3 points) dans la source Java? Argument de longueur variable à connaître
Que faire lorsque «Échec du chargement de la bibliothèque partagée JNI» s'affiche dans Eclipse
Que faire lorsque la méthode n'est pas trouvée dans f: ajax
[Tutoriel Rails Chapitre 2] Que faire lorsque vous faites une erreur dans le nom de la colonne
[Rails] Que faire lorsque la vue se réduit lorsqu'un message est affiché avec la méthode des erreurs
ProxyFactory est pratique lorsque vous souhaitez tester AOP avec Spring!
Que faire lorsque les modifications du servlet ne sont pas reflétées
Que faire lorsque Cloud 9 est plein dans le didacticiel Rails
Que faire si vous oubliez votre mot de passe root sur CentOS7
[Swift] Lorsque vous voulez savoir si le nombre de caractères dans String correspond à un certain nombre ...
Je veux connaître la méthode du contrôleur où l'exception a été levée dans le ExceptionHandler de Spring Boot
Que faire lorsque javax.el.ELException: Pas une expression de méthode valide: s'affiche lorsque l'écran JSF est affiché
Quelle est la méthode principale en Java?
Que faire lorsque la méthode non définie ʻuser_signed_in? '
[IOS] Que faire lorsque l'image est remplie d'une seule couleur
Que faire lorsque le préfixe c n'est pas lié dans JSP
Que faire si le processus Tomcat reste lorsque vous arrêtez Tomcat dans Eclipse
[RSpec] Lorsque vous souhaitez utiliser la variable d'instance du contrôleur dans le test [attribuer n'est pas recommandé]
La première chose à faire lorsque vous voulez être satisfait d'Heroku sur GitHub avec Eclipse sur Java
Que faire lors du débogage "Source non trouvée"
Qu'utilisez-vous lors de la conversion en String?
Que faire si IllegalStateException se produit dans PlayFramework
Que faire lorsque vous pensez que vous ne pouvez pas Groovy-> Java avec IntelliJ IDEA CE
Que faire lorsque la valeur devient nulle dans le second getSubmittedValue () dans JSF Validator
Vous pouvez ne pas vouloir utiliser la méthode remove sur ArrayList très souvent
Androd: Que faire à propos de "Le Royaume est déjà dans une transaction d'écriture dans"
Que faire si le message "Un serveur est déjà en cours d'exécution" s'affiche. Erreur lors de la tentative de démarrage du serveur rails
[Rails] Je veux tout réinitialiser car les données de l'environnement local sont incorrectes! Que faire avant ça
Que faire si vous obtenez une erreur de nombre d'arguments erroné dans binding.pry
Que faire lorsque le certificat SSL a expiré
Que faire si vous ne pouvez pas obtenir le texte d'un élément dans Selenium
Que faire lorsque l'adresse déjà utilisée est affichée après l'exécution des rails
Lorsque vous souhaitez remplacer dynamiquement l'annotation dans Java 8
ParseException: que faire lorsqu'une date impossible à analyser est atteinte
[Maven] Que faire si on vous demande d’incorporer dans la guerre un fichier jar qui n’est pas dans le référentiel distant
[Joke] Que faire lorsque la fréquence d'échantillonnage non valide est atteinte lors de l'utilisation de Mixxx sur Ubuntu 20.04
[Rails] Que faire si vous effectuez accidentellement une installation groupée dans un environnement de production de votre environnement local
Utilisez JLine lorsque vous souhaitez gérer les frappes sur la console caractère par caractère en Java
[Rails] Que faire si vous ne pouvez pas obtenir de message d'erreur avec la méthode des erreurs
Lorsque vous souhaitez refléter les informations de la branche principale dans la branche actuelle sur laquelle vous travaillez actuellement
Que faire lorsqu'une exception java.io.IOException se produit dans GlassFish
Que faire lorsque vous ne pouvez pas appliquer d'opérateurs d'expression à la liaison de méthode
Delicate est pratique à utiliser lorsque vous souhaitez réutiliser des pièces
Que faire si la commande rails devient inutilisable
Quelle est la méthode pluck?
Quelle est la méthode d'initialisation?
Que faire lorsque la "relation" hibernate_sequence "n'existe pas" dans la colonne ID de PostgreSQL + JPA
[Rails] Que faire lorsque l'erreur Aucune base de données sélectionnée et Base de données inconnue apparaît dans db: migrate
[Débutant en programmation] Que faire lorsque les rails deviennent une erreur dans l'environnement de développement local