私は、delayed_jobs が本番環境で失敗するという奇妙な問題に苦しんでいます。最後に、ロガーに絞り込みました。ログ関数呼び出しをコメントアウトすると、すべてが機能します。ただし、ログに記録しようとすると、delayed_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'
私のロガーは次のようになります。
@@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
「@@error_log_file.sync = true」という行をコメントアウトすると、それも機能します。
これは遅延ジョブの問題ですか、それとも私のログ ディレクトリがシンボリック リンクであることに関連している可能性がありますか (標準の capistrano デプロイによるセットアップとして)?
また、error.log ファイルには何も書き込まれず、delayed_job.log にも何も書き込まれません。完全に困惑...