Как создать очередь из демона в приложении rails без получения «IOError: closed stream» - PullRequest
0 голосов
/ 22 февраля 2012

В демоне, который отслеживает твиттер-поток, у меня есть такая конструкция:

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 голосов
/ 07 марта 2012

Эта проблема связана с вопросом .Подробнее об этом вы можете прочитать здесь .Итак, в моем случае я просто переназначил регистраторы 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
...