Lorsque j'exécute des requêtes (par exemple, MyModel.where(...)
ou record.associated_things
) dans la console, comment puis-je voir les requêtes de base de données en cours d'exécution pour mieux comprendre ce qui se passe?Comment afficher les requêtes SQL exécutées dans la console Rails?
Répondre
Entrez cette ligne dans la console:
ActiveRecord::Base.logger = Logger.new(STDOUT)
Parfait , juste ce dont j'avais besoin. Avez-vous une recommandation où aller trouver de petits trucs tels que ceux-ci sont documentés? – randombits
Bien sûr. http://slash7.com/2006/12/21/secrets-of-the-rails-console-ninjas/ et http://stackoverflow.com/questions/123494/whats-your-favourite-irb-trick Plus http : //railscasts.com/ est toujours bon. –
Cela fonctionne pour les rails 3+ mais pas 2, voir http://stackoverflow.com/a/1576221 si vous êtes toujours là :) – rogerdpack
requêtes ActiveRecord ad hoc dans la console ne le font pas bien. Quoi qu'il en soit à changez ce comportement?
Etes-vous sûr de cela? J'utilise la console tout le temps pour des choses comme ça. Pour l'environnement de développement, le comportement par défaut consiste à consigner les requêtes dans le fichier development.log. Êtes-vous sûr de ne pas avoir modifié votre niveau de journalisation dans votre environnement?
Voyez-vous ce qui suit dans development.rb?
config.log_level = :debug
Dans Rails 3+ vous pouvez utiliser ActiveRecord :: méthode Relation to_sql
:
User.where(:id => 3).to_sql
#=> "SELECT \"users\".* FROM \"users\" WHERE \"users\".\"id\" = 3"
Il existe une méthode .explain
dans Rails 4.
(.to_sql
fonctionne aussi, mais ne comprend montrer)
Category.includes(:products).explain
=> EXPLAIN for: SELECT "categories".* FROM "categories" 0|0|0|SCAN TABLE categories
EXPLAIN for: SELECT "categories_products".* FROM "categories_products" WHERE "categories_products"."category_id" IN (1, 2) 0|0|0|SCAN TABLE categories_products
EXPLAIN for: SELECT "products".* FROM "products" WHERE "products"."id" IN (1, 2, 3, 4, 5, 6, 7) 0|0|0|SEARCH TABLE products USING INTEGER PRIMARY KEY (rowid=?) 0|0|0|EXECUTE LIST SUBQUERY 1
A partir récemment, vous pouvez utiliser ceci:
https://github.com/dejan/rails_panel
Il se compose d'un panneau de console développeur add-on pour le chrome et le fichier de pierres précieuses qui doit être ajouté à Gemfile de votre application comme ceci:
group :development do
gem 'meta_request'
end
Ensuite, exécutez à nouveau:
bundle install
Redémarrez votre application, ouvrez-la et lancez la console du développeur, et vous devriez la voir comme ceci:
- 1. Comment puis-je regarder les requêtes exécutées?
- 2. Journal des requêtes exécutées sur SQL Server
- 3. Tâches longues exécutées dans Rails
- 4. Dans quelle séquence les requêtes et sous-requêtes sont-elles exécutées par le moteur SQL?
- 5. Comment puis-je voir les requêtes exécutées sur Oracle?
- 6. Nombre de requêtes exécutées par NHibernate dans un test unitaire
- 7. SQL joint dans les rails
- 8. Nombre de requêtes MySQL exécutées sur la page
- 9. ASP.NET MVC - Castle ActiveRecord - Afficher les requêtes SQL
- 10. Rails - Voir les requêtes SQL générées dans les fichiers journaux
- 11. Comment afficher les requêtes SQL émises par JPA?
- 12. afficher sur la console
- 13. Obtenir toutes les requêtes exécutées par django sur postgresql
- 14. Comment afficher les requêtes précédentes dans la base de données SQL Server 2000
- 15. Afficher les caractères UTF-8 dans la console
- 16. Afficher les caractères Unicode dans la console Xcode?
- 17. L'enregistrement actif de Can Rails gère les requêtes d'agrégat SQL?
- 18. Comment afficher utf-8 dans les fenêtres console
- 19. Comment tester les rails à partir de la console?
- 20. Comment afficher les fonctions Firefox dans une console?
- 21. Mobile Safari - Afficher la console?
- 22. Comment afficher toutes les chaînes de traduction dans Rails demandées?
- 23. Comment enregistrer les requêtes PostgreSQL?
- 24. before_filter dans les requêtes Rails et ajax
- 25. Rubin on Rails plugin pour afficher les numéros de ligne dans le journal pour les requêtes SQL
- 26. Comment afficher plus de décimales dans la console de sortie?
- 27. Rails 3: requêtes sans injection sql
- 28. Comment imprimer toutes les requêtes dans Magento?
- 29. Filtrage des requêtes ActiveRecord dans les rails
- 30. Journalisation SQL spécifique au modèle dans les rails
Andrew, si vous avez besoin aussi d'exécuter des commandes dans broweser vous pouvez utiliser https://github.com/igorkasyanchuk/rails_db –
Voir aussi cette réponse: http://stackoverflow.com/a/1576221/446106 – mwfearnley