3

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

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

谢谢!

4

4 回答 4

8

您可以查看HireFire

HireFire 在 Heroku 上自动“雇用”和“解雇”(又名“规模”)延迟的 Job 和 Resque 工作人员。当没有队列作业时,HireFire 将触发(关闭)所有工作人员。如果有排队的工作,那么它将雇用(启动)工人。被雇用的工人数量取决于排队工作的数量(比例可以由您配置)。

于 2011-05-09T20:49:50.900 回答
2

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

这是您应该直接向 heroku 支持提出的问题。

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

如果它每周运行,它更有可能是一个 cronjob,而不是只是延迟的东西。您可以使用每日 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

来源

这个任务将每天从 heroku 运行,所以如果你想每周运行它,你需要检查星期几。

于 2010-07-09T08:32:25.397 回答
1

延迟的 Job 工作人员按秒计费,因此您绝对可以启动一个来处理您的任务,并在完成后通过 heroku API 将其关闭。

于 2010-09-08T06:18:02.703 回答
0

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

于 2010-07-09T22:25:26.963 回答