【发布时间】:2011-01-12 19:36:39
【问题描述】:
我遇到了一些奇怪的问题,我的延迟作业在生产中失败了。最后我把它缩小到记录器。如果我注释掉我的日志函数调用,一切正常。但是,如果我尝试登录,我会在 delay_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 中也没有任何内容被写入。完全被难住了...
【问题讨论】:
-
所以在做了更多测试之后,看起来“config.cache_classes = true”是导致这些错误发生的生产环境设置。这是否让任何人对它发生的原因有了新的想法?即使 config.cache_classes = false,delayed_job 也不会写入生产环境中的 log/delayed_job.log。
标签: ruby-on-rails ruby capistrano delayed-job