Задержка работы на Heroku - PullRequest
3 голосов
/ 09 июля 2010

У меня есть приложение Rails , размещенное на Heroku , которое требует еженедельного импорта данных.Задача выполняется администраторами и занимает около 1-2 минут (время вычислений).На Heroku задания, для которых требуется больше времени ожидания 30 секунд .Heroku рекомендует очереди на работу - однако платить $ 36,00 в месяц (цена одного работника) за 8 минут вычислительного времени не представляется целесообразным.Несколько вопросов:

  1. Можно ли платить только за отложенные задания, когда они используются (т.е. запускать службу отложенных заданий только тогда, когда администраторы загружают данные для импорта).отложенная работа требуется?Я не уверен, отображается ли время ожидания только для клиента или фактическая работа отменена.Документация перечисляет «не предпринимать никаких действий» в качестве опции, но я не уверен, каковы последствия этого.

Спасибо!

Ответы [ 4 ]

8 голосов
/ 10 мая 2011

Вы можете проверить HireFire .

HireFire автоматически "нанимает" и "увольняет" (также называемые "весы") работников с отложенными заданиями и заданиями на Героку.Когда нет заданий в очереди, HireFire уволит (закроет) всех работников.Если есть работа в очереди, то она будет нанимать (раскручивать) рабочих.Количество нанятых работников зависит от количества заданий в очереди (это соотношение может быть настроено вами).

2 голосов
/ 09 июля 2010

Возможно ли оплачивать только отложенные задания, когда они используются (т.е. запускать службу отложенных заданий только тогда, когда администраторы загружают данные для импорта).

Это вопрос, который вы должны задать при поддержке heroku.

Требуется ли отложенная работа? Я не уверен, отображается ли время ожидания только для клиента или фактическая работа отменена. Документация перечисляет «не предпринимать никаких действий» в качестве опции, но я не уверен, каковы последствия этого.

Если он запускается еженедельно, это скорее cronjob, чем просто задержка. Вы можете использовать ежедневный адрон Аддон (это бесплатно). Затем создайте файл с именем lib/tasks/cron.rake.

task :cron => :environment do
  if Time.now.strftime('%w').to_i == 0 # run every sunday
    puts "Importing..."
    #... run import
    puts "done."
  end
end

источник

Это задание будет запускаться ежедневно с heroku, поэтому вам нужно проверить день недели, если вы хотите запускать его еженедельно.

1 голос
/ 08 сентября 2010

Задержанным рабочим оплачивается секунда, так что вы можете полностью раскрутить одного, чтобы справиться со своей задачей, и заставить его отключиться через API heroku, когда закончите.

0 голосов
/ 10 июля 2010

После тестирования понял, что тайм-аут не препятствует выполнению долго выполняющихся задач (только результаты отображаются для пользователя).Закончилось добавлением уведомления по электронной почте и разрешением тайм-аута.Посмотрел запрос на многопоточность, но поддержка в Rails кажется ненадежной.

...