2013-08-23 2 views
2

У меня есть веб-приложение, которое я создал с помощью Sinatra. С недавнего времени мне приходилось собирать данные через регулярные промежутки времени и хранить их в базе данных. Для этого мне сказали, что я могу использовать Resque и Clockwork драгоценных камней в комбинезоне.Resque - не обрабатывать очередь

Каждый час или около того мне нужно выполнить почти 15 вычислений на основе базы данных и сохранить результаты в базе данных.

Так что это подход, который я принял. Я решил сделать 15 классов, которые имеют метод perform (точный файл, который я использовал для тестирования, ниже). Затем нужно сделать что-то похожее на Resque.enqueue(GraphData) для всех 15 классов.

class GraphData 

    @queue = :graph_data 

    def self.init() 

    end 

    def self.perform() 
    File.open('/home/ziyan/Desktop/resque.txt', 'a') { | file | file.write("Resqueu - performed - #{Time.now}\n") } 
    end 

end 

Чтобы запустить операцию для целей тестирования, я создал задачу грабли.

desc "Start Resque Workers for Queue" # {{{ 
task :graph_data do |t| 

    ENV["QUEUE"]  = "*" 
    ENV["VVERBOSE"] = "1" 
    ENV["INTERVAL"] = "5" 

    Resque.enqueue(GraphData) 
    #resque = Resque.new 
    #resque << AdminWorker.new 
end # }}} 

Как вы видите, в GraphData классе под self.perform метод, который я пишу в файл.

Моя проблема в том, что это не так! Я сделал что-то не так?

rake graph_data покажет отсутствие выхода. Веб-интерфейс отобразит задание в Queue.

Дополнительная информация

Я добавил еще одну Rake задачу для запуска веб-интерфейса.

desc "Start Resque Web Frontend" # {{{ 
task :resque_web_frontend do |t| 
    sh "resque-web -p 8282" 
    puts "Resque Web Frontend is running on http://localhost:8282" 
end # }} 

Над их, что-то интересное видно. Когда я запускаю задачу грабли, под stats значение pending увеличивается, но не обрабатывается.

Под очередями -> graph_data Я вижу нечто подобное.

Class Args 
GraphData [] 
GraphData [] 
GraphData [] 

То, что я закончил с:

desc "Start Resque Workers for Queue" # {{{ 
task :graph_data do |t| 

    ENV["QUEUE"]  = "*" 
    ENV["VVERBOSE"] = "1" 
    ENV["INTERVAL"] = "5" 

    Rake::Task[ "resque:work" ].invoke 
    Resque.enqueue(GraphData) 
    #resque = Resque.new 
    #resque << AdminWorker.new 
end # }}} 

ответ

5

Является ли это в разработке или производстве? Из того, что вы описываете, похоже, что вы не наслаждаетесь процессом Resque. Как вы запускаете свое приложение? Я больше знаком с использованием Resque с Rails, но вы должны запустить что-то вроде:

rake resque:work QUEUE='*' 

Чтобы иметь спасательный старт рабочих.

+0

О, да ... Вы правы ... У меня есть другой вопрос. Когда я запускаю задачу рейка, каждые 5 секунд он говорит .. 'wait 5 seconds' и т. Д. И повторяет. Что это за повторение? Это не повторяет задачу. Так вот где мне нужно использовать «Clockwork» для выполнения задачи ежечасно? –

+0

Не уверен, но, вероятно, работник Resque каждые 5 секунд проводит опрос, чтобы увидеть, есть ли что-то делать (например, смотреть в очередь, чтобы увидеть, есть ли задание для выбора). Вы можете использовать камень resque_scheduler для выполнения задания с регулярным интервалом. – Martin

+0

Для тех, у кого есть ошибки загрузки, используйте: 'QUEUE = * rake environment resque: work' –

Смежные вопросы