রেল কনসোলে চালিত এসকিউএল কোয়েরিগুলি কীভাবে প্রদর্শিত হবে?


115

আমি যখন কনসোলে কোয়েরিগুলি (যেমন MyModel.where(...)বা record.associated_things) চালাচ্ছি , তখন কীভাবে ঘটছে সে সম্পর্কে আরও বুঝতে পারার জন্য আমি কীভাবে প্রকৃত ডাটাবেস প্রশ্নগুলি চালিত হতে পারি?


অ্যান্ড্রু, আপনি যদি broweser কমান্ড চালানোর জন্য আরো প্রয়োজন আপনি ব্যবহার করতে পারেন github.com/igorkasyanchuk/rails_db
ইগর Kasyanchuk

এই উত্তর দেখুন: stackoverflow.com/a/1576221/446106
mwfearnley

উত্তর:


249

রেল 3+

কনসোলে এই লাইনটি প্রবেশ করান:

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

রেল 2

কনসোলে এই লাইনটি প্রবেশ করান:

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
হুলা_জেল

আমি এখানে অনেকবার এসেছি, যখন আমি ক্রোমে "
রেলগুলি

33

রেল 3+ এ আপনি অ্যাক্টিভেকর্ড :: রিলেশন 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এখনও কাঁচা বিন্যাসে বর্গ কোয়েরি সরবরাহ করে না যা আমি পিজি কনসোলে চালাতে পারি। তবে বিশ্লেষণ ও বিশ্লেষণের জন্য আমার কাঁচা প্রশ্নের প্রয়োজন ছিল। আমি অনুমান করি আপাতত ব্যাখ্যা দিয়ে করতে হবে।
অভিষেক

4

সাম্প্রতিক হিসাবে, আপনি এটি ব্যবহার করতে পারেন:

https://github.com/dejan/rails_panel

এটিতে ক্রোমের জন্য বিকাশকারী কনসোল প্যানেল অ্যাড-অন এবং রত্ন ফাইল রয়েছে যা আপনার অ্যাপ্লিকেশনটির জেমফাইলে এভাবে যুক্ত করা দরকার:

group :development do
  gem 'meta_request'
end

তারপরে আবার চালান:

bundle install

আপনার অ্যাপ্লিকেশনটি পুনরায় চালু করুন, এটি খুলুন এবং বিকাশকারী কনসোল চালু করুন এবং আপনার এটি দেখতে হবে: এখানে চিত্র বর্ণনা লিখুন


2

রেল 6 থেকে শুরু করে আরও সুবিধাজনক পন্থা রয়েছে: কেবল ActiveRecord::Base.verbose_query_logs = trueকনসোলে যোগ করুন এবং আপনি যে সমস্ত এসকিউএল কল এবং যেখানে এটি কল হয়েছিল সেখানে দেখতে পাবেন। আরও তথ্য 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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.