Файл журнала Development.log не регистрирует SQL-запросы Rails

Я следую учебнику Майкла Хартла по рельсам здесь:

http://ruby.railstutorial.org/chapters/modeling-and-viewing-users-one#top

Я использую эту команду для отслеживания запросов SQL в отдельном окне:

tail -f log/development.log

Однако, пока я нахожусь в изолированной консоли rails, журнал не обновляется операторами SQL, вместо этого они отображаются в консоли rails. Как я могу исправить это поведение?

Я должен добавить, что мои миграции базы данных и изменения в модели данных (новые таблицы и т. д.) отражаются в журнале. Только операторы SQL, распространяемые методами внутри консоли rails, опускаются (и вместо этого отображаются в консоли rails).

Вот мой Gemfile:

source 'http://rubygems.org'

gem 'rails', '3.1.0'

# Bundle edge Rails instead:
# gem 'rails',     :git => 'git://github.com/rails/rails.git'

gem 'sqlite3'

group :development do
  gem 'rspec-rails', '2.6.1'
  gem 'annotate', :git => 'git://github.com/ctran/annotate_models.git'
end

group :test do
  gem 'rspec-rails', '2.6.1'
  gem 'webrat', '0.7.3'
  gem 'spork', '0.9.0.rc8'
  gem 'guard-spork'
  gem 'autotest', '4.4.6'
  gem 'autotest-rails-pure', '4.1.2'
  gem 'autotest-fsevent', '0.2.4'
  gem 'autotest-growl', '0.2.9'
end

# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails', "  ~> 3.1.0"
  gem 'coffee-rails', "~> 3.1.0"
  gem 'uglifier'
end

gem 'jquery-rails'

# Use unicorn as the web server
# gem 'unicorn'

# Deploy with Capistrano
# gem 'capistrano'

# To use debugger
# gem 'ruby-debug19', :require => 'ruby-debug'

Вот вывод консоли рельсов:

Larson-2:sample larson$ rails console --sandbox
Loading development environment in sandbox (Rails 3.1.0)
Any modifications you make will be rolled back on exit
ruby-1.9.2-p290 :001 > user = User.create(:name => "A Nother", :email => "[email protected]")
   (0.1ms)  SAVEPOINT active_record_1
  SQL (13.4ms)  INSERT INTO "users" ("created_at", "email", "name", "updated_at") VALUES (?, ?, ?, ?)  [["created_at", Thu, 15 Sep 2011 20:34:09 UTC +00:00], ["email", "[email protected]"], ["name", "A Nother"], ["updated_at", Thu, 15 Sep 2011 20:34:09 UTC +00:00]]
   (0.1ms)  RELEASE SAVEPOINT active_record_1
 => #<User id: 1, name: "A Nother", email: "[email protected]", created_at: "2011-09-15 20:34:09", updated_at: "2011-09-15 20:34:09"> 
ruby-1.9.2-p290 :002 > user.destroy
   (0.1ms)  SAVEPOINT active_record_1
  SQL (0.3ms)  DELETE FROM "users" WHERE "users"."id" = ?  [["id", 1]]
   (0.1ms)  RELEASE SAVEPOINT active_record_1
 => #<User id: 1, name: "A Nother", email: "[email protected]", created_at: "2011-09-15 20:34:09", updated_at: "2011-09-15 20:34:09"> 
ruby-1.9.2-p290 :003 > 

А вот настройки в моем config/environments/development.rb файле

Sample::Application.configure do
  # Settings specified here will take precedence over those in config/application.rb

  # In the development environment your application's code is reloaded on
  # every request.  This slows down response time but is perfect for development
  # since you don't have to restart the web server when you make code changes.
  config.cache_classes = false

  # Log error messages when you accidentally call methods on nil.
  config.whiny_nils = true

  # Show full error reports and disable caching
  config.consider_all_requests_local       = true
  config.action_controller.perform_caching = false

  # Don't care if the mailer can't send
  config.action_mailer.raise_delivery_errors = false

  # Print deprecation notices to the Rails logger
  config.active_support.deprecation = :log

  # Only use best-standards-support built into browsers
  config.action_dispatch.best_standards_support = :builtin

  # Do not compress assets
  config.assets.compress = false

  # Expands the lines which load the assets
  config.assets.debug = true

    #Ensure that log level is set to capture ALL messages (from Stack Overflow)
    config.log_level = :debug

end

Наконец, вот результат development.log:

Larson-2:sample larson$ tail -f log/development.log       
   (0.1ms)  SELECT "schema_migrations"."version" FROM "schema_migrations" 
   (0.0ms)  PRAGMA index_list("users")
   (0.1ms)  SELECT "schema_migrations"."version" FROM "schema_migrations" 
   (0.2ms)  select sqlite_version(*)
   (1.8ms)  CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "email" varchar(255), "created_at" datetime, "updated_at" datetime) 
   (1.1ms)  CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL) 
   (0.0ms)  PRAGMA index_list("schema_migrations")
   (1.6ms)  CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version")
   (0.1ms)  SELECT version FROM "schema_migrations"
   (1.0ms)  INSERT INTO "schema_migrations" (version) VALUES ('20110915130358')

person Andrew Lauer Barinov    schedule 15.09.2011    source источник
comment
Я испытываю те же самые вещи с почти такой же настройкой. Тоже хотелось бы узнать исправление.   -  person Fred Fickleberry III    schedule 17.09.2011
comment
Такая же ситуация, хотелось бы исправить...   -  person KenB    schedule 07.10.2011
comment
И тут такая же ситуация..   -  person JonatasTeixeira    schedule 18.06.2014


Ответы (5)


По-видимому, отображение SQL в консоли, а не в журнале разработки, является поведением по умолчанию для Rails 3.1. Я не нашел параметр конфигурации для изменения этого поведения, но я обнаружил, что после запуска консоли вы можете просто сделать:

irb(main):001:0> ActiveRecord::Base.logger = Rails.logger

и это удалит sql из консоли и вернет его в development.log. Или, если вы не хотите делать это каждый раз при запуске консоли, вы можете отредактировать gems/railties-(version)/lib/rails/console.rb и сделать указанное выше назначение после строки в методе запуска. что гласит:

@app.load_console

Не сказать, что это хорошее решение, но оно поможет мне, пока я не найду что-нибудь получше...

person KenB    schedule 07.10.2011

Убедитесь, что для вашего уровня журнала установлено значение :debug в config/environments/development.rb, например:

 config.log_level = :debug
person Cody Caughlan    schedule 15.09.2011
comment
Я последовал вашему предложению, но у меня все еще та же проблема. См. вывод моей консоли (для консоли tail и rails) выше, а также мой файл config/environments/development.rb. - person Andrew Lauer Barinov; 16.09.2011

Комбинируя ответ KenB и , как я могу загрузить файл в консоли ruby ​​on rails?,

просто создайте файл .irbrc и включите следующую строку:

ActiveRecord::Base.logger = Rails.logger
person prusswan    schedule 18.01.2012

На старой вики Rails также есть некоторая информация об использовании пользовательских регистраторов и настройке уровней журналов для этого: http://oldwiki.rubyonrails.org/rails/pages/HowtoConfigureLogging

Для стандартного логгера Rails вы можете использовать следующую строку в config/environments/development.rb:

config.log_level = :debug

Для пользовательских регистраторов (таких как log4j) вам нужно будет использовать:

config.logger.level = Logger::DEBUG

или все, что принимает регистратор.

person Community    schedule 09.04.2012

Удалите config.active_record.logger = nil из application.rb ... если он установлен.

person Artem Kalinchuk    schedule 04.10.2011