heroku - 我应该将 rails5 ActiveJob 默认异步适配器用于生产中的小型后台作业吗?

标签 heroku ruby-on-rails-5 rails-activejob

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/

相关文章:

ruby-on-rails - 在 AWS 上使用 deliver_later 的 Rails Action Mailer

parameters - 在 Rails 5 中使用 wice_grid gem 时,如何启用 `raise_on_unfiltered_parameters` 来尊重参数过滤

ruby-on-rails - 如何过滤或删除 ActiveJob 参数的日志记录?

node.js - 是否可以通过 Node.js 应用程序控制 Heroku(就像 Heroku Ruby gem 那样)?

sql - 将远程 sql.gz 文件导入 ClearDB 数据库

ruby-on-rails - 基于 where 谓词从 Rails API 中删除的 Curl 命令?

javascript - 未定义方法 `has_content_type?' 为 nil :NilClass

actionmailer - 事件作业 - 如何取消预定的 Action Mailer 作业?

mysql - 远程 Golang 实例上的 SQL 数据库

ruby-on-rails - 无效的配置选项 `:provider'