Rails 应用程序使用外部服务处理和激活许可证,外部服务有时会将 Rails 请求的处理延迟到 30 多秒,然后会向前端返回错误(我正在运行 heroku,所以最大为 30 秒)。
我尝试使用 ActiveJobs 和默认的 rails 异步适配器(Rails 5),我可以看到它在 Heroku 中开箱即用。我一直在读我应该使用另一个 web 进程,例如 redis,但是如果后台作业应该在请求完成后直接执行,并且如果只是在外面打另一个可能更慢的 API,那么使用它是不是很糟糕默认异步?
我可以看到这是在进程内线程中处理的,但我没有看到这么小的工作有另一个 Web 进程的原因。
最佳答案
我在生产中使用异步适配器发送电子邮件。这是一项很小的工作。发送电子邮件最多可能需要 3 秒钟。
该文档说它不适合生产,因为它会在重新启动时丢弃待处理的作业。如果我没记错的话,Heroku 每天重启一次 dynos。
如果您的作业在重新启动期间处于挂起状态,则该作业将丢失。就我而言,重启期间的待处理电子邮件非常少。到现在为止还挺好。
但是,如果您的作业需要 30 秒,我将使用 Resque 或 DelayedJob。
关于heroku - 我应该将 rails5 ActiveJob 默认异步适配器用于生产中的小型后台作业吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52678526/