복붙노트

[RUBY-ON-RAILS] 어떻게 SQL은 레일 콘솔에서 쿼리를 실행 보여?

RUBY-ON-RAILS

어떻게 SQL은 레일 콘솔에서 쿼리를 실행 보여?

내가 콘솔에서 쿼리 (i.n. Model.where (...) 또는 record.associated 일)를 실행하면, 어떻게 내가 더 무슨 일이 일어나고 있는지 이해를 얻을 수 있도록 실제 데이터베이스 쿼리가 실행되는 것을 볼 수 있습니까?

해결법

  1. ==============================

    1.콘솔에서이 줄을 입력합니다 :

    콘솔에서이 줄을 입력합니다 :

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

    콘솔에서이 줄을 입력합니다 :

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

    2.레일에서 3+ 당신은 액티브 :: 관계의 to_sql 방법을 사용할 수 있습니다 :

    레일에서 3+ 당신은 액티브 :: 관계의 to_sql 방법을 사용할 수 있습니다 :

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

    3.레일 4의 .explain 방법이있다. (.to_sql도 작동하지만,하지 않습니다 쇼 포함)

    레일 4의 .explain 방법이있다. (.to_sql도 작동하지만,하지 않습니다 쇼 포함)

    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
    
  4. ==============================

    4.최근에서, 당신은이를 사용할 수 있습니다 :

    최근에서, 당신은이를 사용할 수 있습니다 :

    https://github.com/dejan/rails_panel

    그것은 개발자 콘솔 패널로 구성 추가에 크롬과 같은 응용 프로그램의 Gemfile에 추가해야합니다 보석 파일 :

    group :development do
      gem 'meta_request'
    end
    

    그런 다음 다시 실행

    bundle install
    

    를 열고 발사 개발자 콘솔, 그리고 당신이 이런 식으로 표시되어야합니다, 응용 프로그램을 다시 시작합니다 :

  5. ==============================

    5.내가 설정 / application.rb에서 로거 수준을 설정하는 것을 선호합니다 :

    내가 설정 / application.rb에서 로거 수준을 설정하는 것을 선호합니다 :

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

    생산에 내 ENV [ 'LOG_LEVEL는'] 로거 :: 정보의 값으로 설정됩니다 내 로컬 컴퓨터에이 로거 :: DEBUG 수 있습니다.

  6. ==============================

    6.레일 6 일부터 시작하면 더 편리 접근 방식이있다 : 단순히 콘솔의 진정한 액티브 :: Base.verbose_query_logs을 = 추가하고 당신이 그것을 호출 한 모든 SQL 호출과 장소를 볼 수 있습니다. 더 많은 정보 https://guides.rubyonrails.org/debugging_rails_applications.html#verbose-query-logs

    레일 6 일부터 시작하면 더 편리 접근 방식이있다 : 단순히 콘솔의 진정한 액티브 :: Base.verbose_query_logs을 = 추가하고 당신이 그것을 호출 한 모든 SQL 호출과 장소를 볼 수 있습니다. 더 많은 정보 https://guides.rubyonrails.org/debugging_rails_applications.html#verbose-query-logs

  7. from https://stackoverflow.com/questions/2936000/how-to-show-sql-queries-run-in-the-rails-console by cc-by-sa and MIT license