Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby &引用;委托书;捕获用于DB存储的$stderr和$stdout_Ruby_Ruby On Rails 3_Mongoid_Delayed Job - Fatal编程技术网

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,这很有效!我只想在启动方法时看到调试信息,而不是等待结束并保存记录。