रेल कंसोल में चलाए जाने वाले SQL प्रश्नों को कैसे दिखाया जाए?


115

जब मैं कंसोल में प्रश्नों (जैसे MyModel.where(...)या record.associated_things) को चलाता हूं, तो मैं वास्तविक डेटाबेस प्रश्नों को कैसे चला सकता हूं, इसलिए मैं समझ सकता हूं कि क्या हो रहा है?


एंड्रयू, अगर आपको भी ब्राउजर में कमांड चलाने की आवश्यकता है, तो आप github.com/igorkasyanchuk/rails_db
इगोर कासिआनचुक

इस उत्तर को भी देखें: stackoverflow.com/a/1576221/446106
mwfearnley

जवाबों:


249

रेल 3+

इस लाइन को कंसोल में दर्ज करें:

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

रेलें २

इस लाइन को कंसोल में दर्ज करें:

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

बिल्कुल सही, बस मुझे जो चाहिए था। क्या कोई सिफारिश है कि इन दस्तावेजों के रूप में छोटी चालें कहां जाएं?
रैंडमोबिट्स

2
ज़रूर। slash7.com/2006/12/21/secrets-of-the-rails-console-ninjas और stackoverflow.com/questions/123494/… प्लस railscasts.com हमेशा अच्छा होता है।
जॉन टॉपले

2
यह रेल 3 के लिए काम करता है, लेकिन 2 नहीं, देखें stackoverflow.com/a/1576221 अगर आप अभी भी वहीं हैं :)
rogerdpack

और इसे फिर से निष्क्रिय करने के लिए: ActiveRecord::Base.logger = nil
Hula_Zell

मैं यहाँ कई बार गया हूँ, जब मैं क्रोम में "रेल" टाइप करता हूँ, तो यह इस पृष्ठ को शीर्ष परिणाम के रूप में प्रदर्शित करता है
२३tux

33

रेल 3 में आप ActiveRecord :: संबंध to_sqlविधि का उपयोग कर सकते हैं :

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

25

नहीं है .explainरेल में विधि 4.
( .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

मुझे .explainवसीयत ढूंढने में इतना समय लगा कि मैं नौकरी करूंगा और नहीं .to_sql। और .explainअभी भी कच्चे प्रारूप में एसक्यूएल क्वेरी प्रदान नहीं करता है जिसे मैं पीजी कंसोल में चला सकता हूं। लेकिन मुझे समझाने और विश्लेषण करने के लिए कच्ची क्वेरी की आवश्यकता थी। मुझे लगता है कि अब के लिए समझाने के साथ करना होगा।
अभिषेक ab

4

जैसा कि हाल ही में, आप इसका उपयोग कर सकते हैं:

https://github.com/dejan/rails_panel

इसमें क्रोम के लिए डेवलपर कंसोल पैनल ऐड-ऑन होता है, और मणि फाइल जिसे आपके एप्लिकेशन के जेमफाइल में इस तरह जोड़ा जाना चाहिए :

group :development do
  gem 'meta_request'
end

फिर चलाएं:

bundle install

अपने एप्लिकेशन को पुनरारंभ करें, इसे खोलें, और डेवलपर कंसोल लॉन्च करें, और आपको इसे इस तरह देखना चाहिए: यहां छवि विवरण दर्ज करें


3

रेल 6 से शुरू करना अधिक सुविधाजनक दृष्टिकोण है: बस ActiveRecord::Base.verbose_query_logs = trueकंसोल में जोड़ें और आप सभी SQL कॉल और स्थानों को देखेंगे जहां इसे बुलाया गया था। अधिक जानकारी https://guides.rubyonrails.org/debugging_rails_applications.html#verbose-query-logs


0

मैं इसमें लकड़हारा स्तर सेट करना पसंद करता हूँ config/application.rb:

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

उत्पादन पर मेरा ENV['LOG_LEVEL']मूल्य Logger::INFOमेरे स्थानीय मशीन पर और उसके मूल्य पर सेट हो जाएगा Logger::DEBUG

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.