Pergunta

Estou sofrendo um problema estranho, onde meus touched_jobs estão falhando na produção. Finalmente, reduzi -o ao madeireiro. Se eu comentar minha função de log, tudo funciona. No entanto, se eu tentar registrar, eu recebo isso no manipulador de atraso_job:

 --- !ruby/struct:Delayed::PerformableMethod 
object: AR:User:1
method: :load_and_update_without_send_later
args: []

 | closed stream
/opt/ruby/lib/ruby/1.8/logger.rb:504:in `write'
/opt/ruby/lib/ruby/1.8/logger.rb:504:in `write'
/opt/ruby/lib/ruby/1.8/monitor.rb:242:in `synchronize'
/opt/ruby/lib/ruby/1.8/logger.rb:496:in `write'
/opt/ruby/lib/ruby/1.8/logger.rb:326:in `add'
/opt/ruby/lib/ruby/1.8/logger.rb:374:in `info'
/home/rails/myapp.com/releases/20100203203031/app/models/gmail.rb:35:in `log'

Meu madeireiro se parece com o seguinte:

@@error_log_file = File.open("#{RAILS_ROOT}/log/error.log", 'a')
@@error_log_file.sync = true
def log(msg)
  msg.each do |line|
    line = "#{Time.now.strftime('%H:%M:%S')}  #{line}"
    @@error_log_file.info(line) # this is line 35 where it's failing
    puts line
  end
end

Se eu comentar a linha "@@ error_log_file.sync = true", ela também funciona.

Esse é um problema de trabalho atrasado ou pode estar relacionado ao meu diretório de log sendo um link simbólico (conforme configurado por um capistano padrão)?

Além disso, nada está sendo gravado no meu erro Erro.log e nada está sendo gravado para touched_job.log. Totalmente perplexo ...

Foi útil?

Solução

Woody Peterson encontrou o problema aqui: http://groups.google.com/group/delayed_job/browse_thread/thread/f7d0534bb6c7c83f/37b4e8ed7bfaba42

O problema é:

O DJ está usando o login tamponado dos Rails e a descarga do buffer não está sendo acionada por algum motivo (não sei se é descartado pelo tamanho do buffer ou explicitamente lavado após uma solicitação).

A correção temporária (crédito a Nathan Phelps) é:

Quando em produção, o log em buffer é definido como um valor automático de 1000, o que significa que o descarte não é chamado até que 1000 mensagens sejam registradas. Supondo que você esteja usando o Fork of Atard_job, da Collectiveidea, você pode abordar isso definindo auto_fushing para um valor mais razoável no comando.rb logo após o Logger ser inicializado na linha 64. ou seja,

Atraso :: trabalhador.logger = Rails.logger

Atrasado :: trabalhador.logger.auto_flushing = 1 # ou qualquer outra coisa

Funciona para mim perfeitamente!

Outras dicas

Parece que você está tentando fazer login em um arquivo fechado. Você talvez tenha pensado em experimentar a jóia sysloglogger?

Aqui está um artigo sobre como usá -lo com trilhos, o que deve ajudá -lo a começar.

Eu tive um problema semelhante. O log no Fork Collectiveea está sendo reescrito - veja esse assunto para mais informações. Talvez tente a versão mais recente para ver se isso a corrige para você.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top