2009-07-20 11 views
9

Otomatik temizleme test.log ve development.log öğelerini raylarda yakacak şekilde nasıl ayarlayabilirim?Ruby on Rails oturumunu döndürme/temizleme

Sunucu başlangıcında dev ve test günlüklerini otomatik olarak silmek için bir ayar var mı ve çalıştırmayı test ediyor mu?

+0

"Temizleme" ile tam olarak ne demek istiyorsun? – cakeforcerberus

cevap

19

burada size yardım etmek - ve varsayılan seçenekleri vardır rotasyon. İşte

işim bu: Bir formatlayıcıyla environment.rb yılında

biz bu kendi kaydedicilerini oluşturur

new_logger = Logger.new(File.join(RAILS_ROOT, "log", "new_logger_#{RAILS_ENV}.log"), 'daily') 
new_logger.formatter = Logger::Formatter.new 

kendi logger tanımlamak ... ortam başına biriyle, (böylece damgaları vb olsun) ve günlük olarak döndürülür. bazen çok yararlı -

Sonra başlatma bloğunda biz Açıkçası burada da gücünü görebilirsiniz active_record ve action_controller için farklı kaydediciler için bu logger

Rails::Initializer.run do |config| 

    config.active_record.logger = new_logger 
    config.action_controller.logger = new_logger 

    #snip 
end 

kullanmak Rails sormak!

+4

Not: Raylar 3'te, "initalizasyon bloğu", development.rb, production.rb, vb. Içindir. – bcoughlan

+1

Ayrıca, Rails 3'te 'RAILS_ROOT'unuz' Rails.root'dur 've' RAILS_ENV' 'Rails.env''dir. Rails topluluğunun artık kapak kilidine girmediği anlaşılıyor mu? – Ziggy

2

Bu eğitici yazıda bakın: Rotating Rails Log Files, sorununuzu çözüp çözmediğimi bilmiyorum, çünkü günlük dosyalarımı önemsemiyorum.

Hpe size yardım ediyorum!

+0

Talihsiz logrotate sadece Unix benzeri sistemler için kullanılabilir –

12

rake log:clearlog/*.log ile eşleşen tüm dosyaları sıfır baytlara kesen bir komisyon görevidir. Sunucunuzda bunu başlatabilir ve test görevlerini çalıştırabilirsiniz. Tüm komut dosyası/sunucu

1

, sen böyle bir şey yapmak değiştirmek im emin bir yakut script: ruby logger yandan ise

#!/usr/bin/env ruby 
require 'fileutils' 
FileUtils.rm File.join(File.dirname(__FILE__), log, *.log) 
require File.dirname(__FILE__) + '/../config/boot' 
require 'commands/server' 
0

Denemeden sonra, Rails başlatıcılarının standart Ruby File sınıfını kullanarak dosyayı kesebileceği doğru noktada yüklendiğini buldum.

if MyRailsApp::Application.config.truncate_logs_on_server_start 
    # Making an assumption here that we're logging to a file... 
    File.open("log/#{ENV["RAILS_ENV"]}.log", "w") do |log_file| 
    log_file.puts("Initializer truncate_logs_on_server_start reset the log file") 
    log_file.puts 
    end 
end 

Sadece o zaman application.rb ve çeşitli ortamlarda MyRailsApp::Application.config.truncate_logs_on_server_start ayarlamanız gerekir: Ben config/ilklendiriciler/truncate_logs_on_server_start.rbiçinde bu var.