Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Heroku 我应该为生产中的小型后台作业使用rails5 ActiveJob默认异步适配器吗?_Heroku_Ruby On Rails 5_Rails Activejob - Fatal编程技术网

Heroku 我应该为生产中的小型后台作业使用rails5 ActiveJob默认异步适配器吗?

Heroku 我应该为生产中的小型后台作业使用rails5 ActiveJob默认异步适配器吗?,heroku,ruby-on-rails-5,rails-activejob,Heroku,Ruby On Rails 5,Rails Activejob,Rails应用程序使用外部服务处理和激活许可证,外部服务有时会将Rails请求的处理延迟到30秒以上,然后会将错误返回到前端(我运行的是heroku,所以最大值为30秒) 我试着使用ActiveJobs和默认的rails异步适配器(rails 5),我可以看到这在Heroku中是现成的。我一直在读,我应该使用另一个web进程,例如redis,但是如果后台作业应该在请求完成后直接执行,如果只是在外部运行另一个API,可能会比较慢,那么使用默认的异步是否很糟糕 我可以看出这是进程内线程中的句柄,但我

Rails应用程序使用外部服务处理和激活许可证,外部服务有时会将Rails请求的处理延迟到30秒以上,然后会将错误返回到前端(我运行的是heroku,所以最大值为30秒)

我试着使用ActiveJobs和默认的rails异步适配器(rails 5),我可以看到这在Heroku中是现成的。我一直在读,我应该使用另一个web进程,例如redis,但是如果后台作业应该在请求完成后直接执行,如果只是在外部运行另一个API,可能会比较慢,那么使用默认的异步是否很糟糕


我可以看出这是进程内线程中的句柄,但我不认为这样小的作业有理由拥有另一个web进程。

我在生产中使用异步适配器发送电子邮件。这是一项很小的工作。发送一封电子邮件可能需要3秒钟

doc说它不适合生产,因为它会在重新启动时删除挂起的作业。如果我没记错的话,Heroku每天重新启动dynos一次

如果您的作业在重新启动期间处于挂起状态,则该作业将丢失。就我而言,在重启过程中挂起的电子邮件非常少。到目前为止还不错


但是,如果您的作业需要30秒,我将使用Resque或DelayedJob。

如果用于生产环境中的小型后台作业,在出现故障/服务器重新启动时不需要100%的持久性,其持续时间相对较短,因此单独的进程将是一种过度杀伤力,我建议使用

吸盘冲压宝石的设计正是为了处理这种情况。它使用
concurrent ruby
gem为您创建的每个作业准备执行线程池,这可能是ruby中最健壮的并发库。它还将
挂接在_exit
上,以完成所有挂起的任务,因此我想您可以期望这个gem比异步作业更可靠

需要注意的一点是,尽管活动作业支持吸盘穿孔,但适配器编写得不好。或者,至少,当您使用吸盘穿孔适配器时,它的行为将类似于
async
适配器。所以,如果您想要比AsyncJob更有用/更健壮的东西,我建议您使用裸吸盘打孔