Rails konsolunda çalıştırılan SQL sorguları nasıl gösterilir?


115

Konsolda sorgu çalıştırdığımda (örn. MyModel.where(...)Veya record.associated_things), yürütülen gerçek veritabanı sorgularını nasıl görebilirim, böylece ne olduğunu daha iyi anlayabilirim?


Andrew, ayrıca tarayıcıda komut çalıştırmanız gerekiyorsa, github.com/igorkasyanchuk/rails_db
Igor Kasyanchuk'u

Yanıtlar:


249

Raylar 3+

Bu satırı konsola girin:

ActiveRecord::Base.logger = Logger.new(STDOUT)

Raylar 2

Bu satırı konsola girin:

ActiveRecord::Base.connection.instance_variable_set :@logger, Logger.new(STDOUT)

Mükemmel, tam da ihtiyacım olan şey. Belgelenen bu tür küçük numaraların nereye gidileceğine dair herhangi bir öneriniz var mı?
randombits


2
Bu, 3+ raylar için geçerli ancak 2 için geçerli değil, hala oradaysanız stackoverflow.com/a/1576221 adresine bakın :)
rogerdpack

Ve tekrar devre dışı bırakmak için: ActiveRecord::Base.logger = nil
Hula_Zell

Pek çok kez burada bulundum,
krom'a

33

Rails 3+ içinde ActiveRecord :: Relation to_sqlyöntemini kullanabilirsiniz:

User.where(:id => 3).to_sql
#=> "SELECT \"users\".* FROM \"users\"  WHERE \"users\".\"id\" = 3"

25

.explainRails 4'te bir yöntem var
(da .to_sqlişe yarıyor, ancak içeriği göstermiyor)

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

.explainİşi yapacak iradeyi bulmak çok zamanımı aldı , değil .to_sql. Ve .explainyine ben pg konsolunda çalıştırabilirsiniz ham formatta sql sorgu sağlamaz. Ama açıklamak ve analiz etmek için ham sorguya ihtiyacım vardı. Sanırım şimdilik açıklama yapmak zorunda kalacak.
abhishek77in

4

Yakın zamanda olduğu gibi, bunu kullanabilirsiniz:

https://github.com/dejan/rails_panel

Chrome için geliştirici konsolu paneli eklentisi ve aşağıdaki gibi uygulamanızın Gemfile dosyasına eklenmesi gereken gem dosyasından oluşur :

group :development do
  gem 'meta_request'
end

Sonra tekrar çalıştırın:

bundle install

Uygulamanızı yeniden başlatın, açın ve geliştirici konsolunu başlatın ve şu şekilde görmelisiniz: görüntü açıklamasını buraya girin



0

Günlükçü düzeyini şurada ayarlamayı tercih ederim config/application.rb:

config.after_initialize do
  Rails.logger.level = (ENV['LOG_LEVEL'] || Logger::INFO).to_i
end

Üretimde , yerel makinemin ENV['LOG_LEVEL']değerine ayarlanacak Logger::INFOve yerel makinemde olacak Logger::DEBUG.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.