У меня есть веб-приложение, которое я создал с помощью 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 секунд он говорит .. 'wait 5 seconds' и т. Д. И повторяет. Что это за повторение? Это не повторяет задачу. Так вот где мне нужно использовать «Clockwork» для выполнения задачи ежечасно? –
Не уверен, но, вероятно, работник Resque каждые 5 секунд проводит опрос, чтобы увидеть, есть ли что-то делать (например, смотреть в очередь, чтобы увидеть, есть ли задание для выбора). Вы можете использовать камень resque_scheduler для выполнения задания с регулярным интервалом. – Martin
Для тех, у кого есть ошибки загрузки, используйте: 'QUEUE = * rake environment resque: work' –