如何在rails app中从守护进程创建一个que,而不会得到" IOError:closed stream"

时间:2012-02-22 17:13:11

标签: ruby-on-rails asynchronous mongoid eventmachine

在追踪twitter-stream的守护进程中,我有这样的结构:

client.track(*hashtags) do |status|
  if status.coordinates != nil
    EventMachine.synchrony 
      job = Qu.enqueue TweetProcessor, status
      puts "Enqueued tweet processing #{job.id}"
    end
  end
end

对于问题库我正在使用qu-mongo我有这个配置

# /config/initializers/qu.rb
Qu.configure do |c|
  c.connection = Mongo::Connection.new('127.0.0.1').db("appname_qu")
end

我尝试了很多选项,但总是以IOError: closed stream生成。

1 个答案:

答案 0 :(得分:0)

此问题与此question有关。有关详细信息,请阅读here。所以,在我的情况下,我只是在守护程序循环开始时将rails的记录器和qu的记录器重新分配给同一个文件,最后关闭它,一切正常:

client.track(*hashtags) do |status|
  parser_logger = ActiveSupport::BufferedLogger.new( File.join(Rails.root, "log", "qu.log"))
  Rails.logger = parser_logger
  Qu.configure do |c|
    c.connection  = Mongo::Connection.new.db("appname_qu")
    c.logger = parser_logger
  end
  job = Qu.enqueue TweetProcessor, status 
  Rails.logger.close
end