2013-02-11 40 views
7

i günlüğü mücevher kullanmak günlüğü yapmak Düzende yakut 1.9.2p180 (2011-02-18 revizyon 30909)Yakut: Kaydedici ve Cinler

kullanıyorum. Programım, daemon olarak kullanılan iki bloğa sahiptir.

Ama bir hata ve hiçbir şey bu bloklar sonuçlardan günlüğü kayıt dosyasına yazılır: Burada

log shifting failed. closed stream 
log writing failed. closed stream 

kodunda olur:

log = Logger.new(logbase + 'logfile.log', 'monthly') 
log.level = Logger::INFO 

proc = Daemons.call(options) do 
    # [...] 
    log.info "Any Logmessage" 
    # [...] 
end 

Herhangi Idea, sorun ne var?

cevap

8

Daemons taş, bu işlemin arka planını düzenlediğinde tüm dosya tanıtıcılarını kapatır. Böylece Daemons bloğundan önce açılan tüm log dosyaları, çatallı süreç içerisinde kapatılacak.

Ve kapalı dosya tanıtıcılarına yazamadığınız için -> hataları.

Eğer bölüm okuyarak bir işlem Artalanda zaman ne olduğu hakkında daha fazla bilgi bulabilirsiniz: cinleri içten benim cinleri nasıl kullanıyor

?
http://daemons.rubyforge.org/Daemons.html

çözüm cin bloğunun yerine bunun dışında iç günlük dosyası açmaktır. Bu düzeltmeli. Ancak, göz atmanın çalışan dizini / olarak değiştirdiğine dikkat edin; bu nedenle, günlük dosyası yollarına başvururken bunu dikkate alın.

+0

. Çok teşekkür ederim. – Dakkar

2

Gecikmeli işlemlerde başarıyla çalışan bir çözüm, tüm açık dosyaların çatapatlanmadan önce çıkarılmasını ve daha sonra yeniden açılmasını içerir.

tanıyan ayarlanabilir özü from delayed_job: yardımcı

@files_to_reopen = [] 
ObjectSpace.each_object(File) do |file| 
    @files_to_reopen << file unless file.closed? 
end 

Daemons.run_proc('some_process') do 
    @files_to_reopen.each do |file| 
    file.reopen file.path, 'a+' 
    file.sync = true 
    end 

    # Your code 
end