2010-07-09 3 views
3

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

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

Спасибо!

ответ

8

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

HireFire автоматически «нанимает» и «стреляет» (иначе «весы») Задерживает работу и освежает рабочих на Хереку. Когда нет заданий на очередь, HireFire запустит (выключит) всех работников. Если есть задания в очереди, тогда они будут нанимать (раскручивать) работников. Количество наемных работников зависит от количества заданий в очереди (соотношение может быть настроено вами).

+0

Спасибо! В конце концов я сделал переключатель, но во время запроса HireFire все еще не было. –

2

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

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

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

Если он работает еженедельно, это скорее скромен, чем что-то, что просто задерживается. Вы можете использовать аддон daily cron (он бесплатный). Затем создайте файл с именем 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 

source

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

+0

Несмотря на то, что задача запускается еженедельно, требуется импортировать данные из листов распространения. Таким образом, выполнение задания CRON на самом деле не является вариантом. –

+0

нет никакой разницы между cronjob и регулярно выполняемым отложенным заданием. Они оба выполняют рубиновый метод с некоторыми параметрами. –

+0

@Damien: Heroku делает разницу в Платеже. И пролеченный Иов может быть чем-то вроде срабатывания взаимодействия пользователя. @Kevin: Почему вы не можете импортировать из листов распространения в cronjob, это не должно быть проблемой. – jigfox

0

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

1

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

+0

Точно. Поскольку вы знаете, когда хотите бежать, это легко. Вы можете создать сценарий, который запустит работника, затем отправит запрос, затем ждет некоторое время, а затем остановит работника. Вы можете оставить работника, работающего в течение 3 часов, каждый раз, когда вы начинаете его за 0,15, казалось бы. –