与Is it feasible to run multiple processeses on a Heroku dyno?或Running Heroku background tasks with only 1 web dyno and 0 worker dynos非常相似的问题,除了我在谈论Ruby on Rails应用程序。
上下文
我知道鼓励将工作人员和网络动力分开......但我仍在测试并且不想支付费用。特别是因为使用我的应用程序,所有的网络请求几乎都发生在AM或PM中,并且在整个中午(以及半夜),几乎没有任何事情发生。
我希望网络dyno能够在"停机时间"上运行两种类型的后台处理:
我已经对此做过相当多的阅读,但这是我第一次做异步,所以我想向社群提出几个问题,以确保我尝试做什么是可行的。
问题
如何免费进行活动#1 说白了......考虑到我上面的上下文,如果我使用Heroku的Scheduler附加组件,这会运行一次性dyno我将被收取费用,因为我现在使用NewRelic来不断ping我的web dyno所以它永远不会睡觉意味着我的一个网络dyno是我的免费dyno。有没有另一种方法可以使用一个网络dyno,在半夜,不会处理任何请求?或者,有没有办法告诉New Relic除了在某些时候ping,这也可以让我旋转一次性dyno但仍然在我的免费dyno时间内?
对于活动#2,我考虑使用延迟作业,但如何告知延迟作业延迟到用户1的会话结束,然后为用户1运行邮件程序,但是如果用户2发送请求,然后再次暂停,然后当用户2完成时,从用户1的邮件处开始停止,然后执行用户2的邮件...等等? / strong>我认为这里面临的挑战的根源在于,根据我所读过的内容,需要使用脚本启动延迟作业。但我不会一直在我的电脑上启动脚本。如何使启动(以及问题中所示的队列)自动发生?
爱甚至只是指出我关于什么方法/什么考虑因素等的方向指针
答案 0 :(得分:1)
我要看一个漂亮的宝石https://github.com/brandonhilkert/sucker_punch来做这件事。根据作者的说法,它是专门为使用Heroku的单一dyno而编写的,用于没有必要旋转另一个dyno的爱好网站。它基本上创建另一个线程。
仅供参考,还有一个附加链接允许sucker_punch执行重复任务,称为https://github.com/facto/fist_of_fury