gpt4 book ai didi

ruby-on-rails - Puma 开发中的 Rails 5.1 ActiveJob 未执行特定的排队作业

转载 作者:行者123 更新时间:2023-12-04 06:28:25 25 4
gpt4 key购买 nike

我正在运行 Rails 5.1.4 服务器(单模式下的 Puma v. 3.10.0),但是特定的 ActionJob 存在问题,该 ActionJob 已正确排队但通常从未执行过。

我有几份工作。除了 1 个特定的作业外,所有作业总是像预期的那样在排队后不久异步执行。

服务器重新启动后,我的特定作业第一次在新排队后正确执行。但是在第一次成功运行后,它不会在接下来的排队中执行。

我通常使用 perform_later 为所有工作排队.

我已经使用 rails console 测试了特定作业的排队情况。以及。每当我在控制台中排队时,它都会立即执行。即使在同一个 session 中。当它在 rails server 中排队时,也尝试使用与应用程序中使用的相同的参数。 ,但在服务器中它只会排队。从来没有表演过。

我检查了日志文件 - 没有任何内容,没有错误,没有 fatal error ,没有警告。它只是声明 [ActiveJob] Enqueued FooBaaJob ,但从不执行工作。

如果作业真的失败了,它至少应该仍然可以写出 [ActiveJob] [FooBaaJob] [id] Performing FooBaaJob在日志中,但它没有。
https://github.com/rails/rails/blob/master/activejob/lib/active_job/logging.rb#L78如果它失败,它实际上应该捕获并记录异常。其次,它永远不会在控制台中运行失败,因此情况不应该如此。

关于在哪里看的任何想法?

最佳答案

好的,所以我终于找到了调试这个问题的方法。

通过在 config/initializers 中创建初始化文件用这一行:Concurrent.use_stdlib_logger(Logger::DEBUG)
我现在将错误数据输出到我的控制台。

[ActiveJob] Enqueued FooBaaJob (Job ID: ...) to Async(default) with arguments: #<GlobalID:0...0 @uri=#<URI::GID gid://test-app/FooBaa/8>>
[2017-10-29 16:10:56.676] DEBUG -- : Error while trying to deserialize arguments: Couldn't find FooBaa with 'id'=8 (ActiveJob::DeserializationError)

第二行是添加 Concurrent.use_stdlib_logger(Logger::DEBUG) 的结果启动文件。

就我而言,我正在 after_create 中启动工作在我的模型中,我猜作业执行以某种方式立即发生,这导致当 ActiveJob 尝试加载它时,记录还没有完全提交到 sqlite 数据库。它也在 MySQL 上进行了测试,结果相同。

Rails 5.0 引入 after_[create|update|destroy]_commit ,所以改变我的 after_createafter_create_commit解决了我的问题,现在每次我尝试时,工作都按预期运行。

对于较早版本的 Rails,您可以移至 after_commiton: :create论据或类似。

关于ruby-on-rails - Puma 开发中的 Rails 5.1 ActiveJob 未执行特定的排队作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46964129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com