Làm thế nào để hiển thị các truy vấn SQL chạy trong bảng điều khiển Rails?


115

Khi tôi chạy các truy vấn (ví dụ: MyModel.where(...)hoặc record.associated_things) trong bảng điều khiển, làm cách nào tôi có thể thấy các truy vấn cơ sở dữ liệu thực tế đang được chạy để tôi có thể hiểu thêm về những gì đang xảy ra?


Andrew, nếu bạn cũng cần phải chạy lệnh trong broweser bạn có thể sử dụng github.com/igorkasyanchuk/rails_db
Igor Kasyanchuk

Xem thêm câu trả lời này: stackoverflow.com/a/1576221/446106
mwfearnley

Câu trả lời:


249

Đường ray 3+

Nhập dòng này vào bảng điều khiển:

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

Đường ray 2

Nhập dòng này vào bảng điều khiển:

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

Hoàn hảo, đúng những gì tôi cần. Có bất kỳ khuyến nghị nào về nơi để tìm các thủ thuật nhỏ như những điều này được ghi lại không?
randombits


2
Công trình này cho đường ray 3+ nhưng không phải 2, xem stackoverflow.com/a/1576221 nếu bạn vẫn còn :)
rogerdpack

Và để vô hiệu hóa nó một lần nữa: ActiveRecord::Base.logger = nil
Hula_Zell

Tôi đã ở đây rất nhiều lần, khi tôi nhập "rails" bằng chrome, nó sẽ hiển thị trang này dưới dạng kết quả hàng đầu
23tux

33

Trong Rails 3+, bạn có thể sử dụng to_sqlphương thức của ActiveRecord :: Relation :

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

25

.explainphương thức trong Rails 4.
( .to_sqlcũng hoạt động, nhưng sẽ không hiển thị bao gồm)

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

Tôi đã mất rất nhiều thời gian để tìm ra ý .explainchí làm công việc và không .to_sql. Và .explainvẫn không cung cấp truy vấn sql ở định dạng thô mà tôi có thể chạy trong bảng điều khiển pg. Nhưng tôi cần truy vấn thô để giải thích và phân tích. Tôi đoán sẽ phải làm với giải thích cho bây giờ.
abhishek77in

4

Từ gần đây, bạn có thể sử dụng cái này:

https://github.com/dejan/rails_panel

Nó bao gồm tiện ích bổ sung bảng điều khiển dành cho nhà phát triển dành cho chrome và tệp gem cần được thêm vào Gemfile của ứng dụng của bạn như sau:

group :development do
  gem 'meta_request'
end

Sau đó chạy lại:

bundle install

Khởi động lại ứng dụng của bạn, mở nó và khởi chạy bảng điều khiển dành cho nhà phát triển và bạn sẽ thấy nó như sau: nhập mô tả hình ảnh ở đây



0

Tôi thích thiết lập cấp trình ghi nhật ký trong config/application.rb:

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

Khi sản xuất ENV['LOG_LEVEL'], giá trị của tôi sẽ được đặt thành giá trị Logger::INFOvà trên máy cục bộ của tôi, nó sẽ như vậy Logger::DEBUG.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.