我正在尝试将stderr
和stdout
存储在我们的数据库中,以便我们后台进程的未来调试目的。我还希望捕获像代理一样透明,我的意思是我希望仍然将stderr
和stdout
输出到常规记录器加上我们的数据库中。
我有这样的代码:
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和带有DelayedJob的Mongoid 3.0.23
答案 0 :(得分:0)
从您的评论中,您的问题似乎是您没有在数据库中看到结果流,因为它们正在发生。但是除了最后,您还没有将文档保存到数据库中。所以...如果你想在流程结束之前在数据库中看到结果,那么你必须在流程结束之前逐步写入数据库。
我建议您查看mongo的$push
operator,您可以使用它来有效地向文档添加更多结果,而无需重写整个文档。您可以使用update
命令将其用于moped,该命令是mongoid的基础。
或者,您可以使用logentries或loggly之类的日志聚合服务来节省大量工作。