我在 Heroku 上托管了 Rails 应用程序,需要每周导入一次数据。该任务由管理员执行,需要 1-2分钟才能运行(计算时间)。在Heroku上,需要超过 30秒超时的工作。 Heroku推荐了工作队列 - 但是,在8分钟的计算时间内,每月支付36.00美元(一名工人的价格)似乎不合适。几个问题:
谢谢!
答案 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
此任务将每天从heroku运行,因此您需要检查星期几,如果您想每周运行它。
答案 2 :(得分:1)
延迟工作工作人员会被第二个工作人员收费,所以你绝对可以通过一个工作来处理你的任务,并在完成后通过heroku API自行关闭。
答案 3 :(得分:0)
经过测试,意识到超时不会阻止长时间运行的任务完成(只是结果显示给用户)。结束添加电子邮件通知并允许超时发生。看看线程请求,但Rails中的支持似乎很不错。