Ruby &引用;委托书;捕获用于DB存储的$stderr和$stdout
我试图将Ruby &引用;委托书;捕获用于DB存储的$stderr和$stdout,ruby,ruby-on-rails-3,mongoid,delayed-job,Ruby,Ruby On Rails 3,Mongoid,Delayed Job,我试图将stderr和stdout存储在我们的数据库中,以便将来调试后台进程。我还希望捕获像代理一样透明,我的意思是我仍然希望将stderr和stdout输出到数据库1中的常规记录器 我有这样的代码: class Message include Mongoid::Document field :stdout field :stderr def enable_capture_output @previous_stderr, $stderr = $stderr, Str
stderr
和stdout
存储在我们的数据库中,以便将来调试后台进程。我还希望捕获像代理一样透明,我的意思是我仍然希望将stderr
和stdout
输出到数据库1中的常规记录器
我有这样的代码:
class Message
include Mongoid::Document
field :stdout
field :stderr
def enable_capture_output
@previous_stderr, $stderr = $stderr, StringIO.new
@previous_stdout, $stdout = $stdout, StringIO.new
end
def disable_and_save_captured_output
self.stdout = $stdout.string
self.stderr = $stderr.string
$stderr = @previous_stderr
$stdout = @previous_stdout
end
end
但是它没有那么好用(
从您的评论中使用:Rails 3.2.11和Mongoid 3.0.23以及DelayedJob,听起来您的问题是,您没有看到正在发生的结果流到数据库中。但是您也没有将文档保存到数据库中,除非在最后。因此…如果您想在第页结束之前查看数据库中的结果,请在进程中,您必须在进程结束之前以增量方式写入数据库 我建议您看看mongo,您可以使用它在不重写整个文档的情况下高效地向文档添加更多结果。您可以将它与
update
命令一起使用,您可以通过它作为mongoid的基础
或者,您可以通过使用或之类的日志聚合器服务来节省大量工作。请解释什么“工作不太好”意思是。它能工作吗?出什么问题了?是因为你忘记调用
self.save
?我正在保存self.save,这很有效!我只想在启动方法时看到调试信息,而不是等待结束并保存记录。