2011-09-15 11 views
10

Seguo di Michael Hartl Rails Tutorial Qui:file di log development.log non sta registrando Rails query SQL

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

Io uso questo comando per tracciare le query SQL in una finestra separata:

tail -f log/development.log 

Tuttavia, mentre sono nella console di rails sandbox, il registro non viene aggiornato con istruzioni SQL, ma vengono visualizzate all'interno della console di rails. Come posso correggere questo comportamento?

Devo aggiungere che le migrazioni del mio database e le modifiche al modello dati (nuove tabelle, ecc.) Si riflettono nel registro. Vengono omesse solo le istruzioni SQL propagate dai metodi all'interno della console di rails (e visualizzate invece nella console di rails).

Ecco il mio 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' 

Qui è l'uscita della console rotaie:

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 > 

e qui ci sono le impostazioni nel mio file 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 

Infine qui è l'uscita development.log finora:

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') 
+0

Sto vivendo le stesse cose con praticamente la stessa configurazione. Gradirebbe anche conoscere la correzione. –

+0

Stessa situazione qui, mi piacerebbe una soluzione ... – KenB

+0

E la stessa situazione qui .. – JonatasTeixeira

risposta

3

Apparentemente mostrando l'SQL nella console piuttosto che development.log è il comportamento predefinito per Rails 3.1. Non ho trovato un'opzione di configurazione per cambiare questo comportamento, ma ho scoperto che, una volta che la console è in esecuzione, si può solo fare:

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

e che prenderà lo SQL dalla console e metterlo di nuovo in development.log. Oppure, se non vuoi farlo ogni volta che accendi la console, puoi modificare gems/railties- (versione) /lib/rails/console.rb, ed effettuare il suddetto compito dopo la linea nel metodo di avvio che legge:

@app.load_console 

Non dicendo che è una buona soluzione, ma sarà marea me sopra finché non trovo qualcosa di meglio ...

13

Assicurarsi che il vostro log level è impostato su :debug in config/environments/development.rb, in questo modo:

config.log_level = :debug 
+2

Ho seguito il tuo suggerimento, ma sto ancora avendo lo stesso problema. Vedi l'output della mia console (sia per la console tail and rails) sopra sia il file config/environments/development.rb. –

0

Rimuovere config.active_record.logger = nil da application.rb ... se è impostato.

1

C'è anche alcune informazioni sul vecchio wiki Rails sull'utilizzo logger personalizzati e impostare i livelli di registrazione per questo: http://oldwiki.rubyonrails.org/rails/pages/HowtoConfigureLogging

Per le guide standard Logger è possibile utilizzare la seguente riga nel config/environments/development.rb:, sarà necessario

config.log_level = :debug 

per logger personalizzati (come log4j) da usare:

config.logger.level = Logger::DEBUG 

o qualsiasi altra cosa accetti il ​​registratore.

Problemi correlati