Heroku上的延迟工作

时间:2010-07-09 08:18:46

标签: ruby-on-rails heroku delayed-job

我在 Heroku 上托管了 Rails 应用程序,需要每周导入一次数据。该任务由管理员执行,需要 1-2分钟才能运行(计算时间)。在Heroku上,需要超过 30秒超时的工作。 Heroku推荐了工作队列 - 但是,在8分钟的计算时间内,每月支付36.00美元(一名工人的价格)似乎不合适。几个问题:

  1. 是否可以仅在使用延迟作业时付费(即仅在管理员上传数据导入时启动延迟作业服务)。
  2. 是否需要延迟工作?我不确定是否仅向客户端显示超时或者是否取消了实际工作。文档确实列出了“不采取行动”作为选项,但我不确定这是什么含义。
  3. 谢谢!

4 个答案:

答案 0 :(得分:8)

您可以查看HireFire

  

HireFire自动“雇佣”和“开火”(又名“秤”)Heroku上的延迟工作和Resque工作人员。当没有队列作业时,HireFire将触发(关闭)所有工作人员。如果有排队的工作,那么它将雇用(提升)工人。获得雇佣的工人数量取决于排队工作的数量(可以由您配置比率)。

答案 1 :(得分:2)

  

是否可以仅在使用延迟作业时付费(即仅在管理员上传数据导入时启动延迟作业服务)。

这是一个你应该直接支持heroku的问题。

  

是否需要延迟工作?我不确定是否仅向客户端显示超时或者是否取消了实际工作。文档确实列出了“不采取行动”作为选项,但我不确定这是什么意思。

如果它每周运行一次,它更可能是一个cronjob而不是刚刚延迟的东西。你可以使用daily cron Addon(它是免费的)。然后创建一个名为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运行,因此您需要检查星期几,如果您想每周运行它。

答案 2 :(得分:1)

延迟工作工作人员会被第二个工作人员收费,所以你绝对可以通过一个工作来处理你的任务,并在完成后通过heroku API自行关闭。

答案 3 :(得分:0)

经过测试,意识到超时不会阻止长时间运行的任务完成(只是结果显示给用户)。结束添加电子邮件通知并允许超时发生。看看线程请求,但Rails中的支持似乎很不错。