问题标签 [rails-activejob]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
915 浏览

ruby-on-rails-4 - ActiveJob 的默认队列(内联运行器)是否支持延迟作业的执行?

我可以使用新的 rails 4.2 功能通过 ActiveJob 发送电子邮件

默认队列(内联运行器?)是否支持指定的延迟,例如(伪代码)

或者我需要另一个宝石吗?通过将 ActiveJob 与内联运行器一起使用,这封电子邮件的发送真的是异步的吗?

0 投票
0 回答
915 浏览

ruby-on-rails-4.2 - Rails runner 和 ActiveJobs(兼容?)

需要每月运行一次作业。我需要在 cron 中使用 gem 调用它。在这种情况下使用工作或耙子?

我无法在控制台中运行我的工作。

rails runner 'MyJob.perform_later'

我正在使用 Rails 4.2

错误:

.rvm/gems/ruby-2.1.4/gems/railties-4.2.0/lib/rails/commands/runner.rb:62:in <top (required)>': uninitialized constant MyJob (NameError) from /Users/leonardo/.rvm/gems/ruby-2.1.4/gems/railties-4.2.0/lib/rails/commands/runner.rb:62:ineval' 来自 /Users/leonardo/.rvm/gems/ruby-2.1.4 /gems/railties-4.2.0/lib/rails/commands/runner.rb:62:in<top (required)>' from /Users/leonardo/.rvm/gems/ruby-2.1.4/gems/railties-4.2.0/lib/rails/commands/commands_tasks.rb:123:in来自 /Users/leonardo/.rvm/gems/ruby-2.1.4/gems/railties-4.2.0/lib /rails/commands/commands_tasks.rb:123:in require_command!' from /Users/leonardo/.rvm/gems/ruby-2.1.4/gems/railties-4.2.0/lib/rails/commands/commands_tasks.rb:90:inrunner' 来自 /Users/leonardo/.rvm/gems/ruby-2.1.4/gems/railties-4.2.0/lib/rails/commands/commands_tasks.rb:39 :in run_command!' from /Users/leonardo/.rvm/gems/ruby-2.1.4/gems/railties-4.2.0/lib/rails/commands.rb:17:in'来自 bin/rails:4:in require' from bin/rails:4:in'

我的工作内容:

类 MyJob < ActiveJob::Base queue_as :default

结尾

0 投票
1 回答
369 浏览

ruby-on-rails - Rails 4.2 ActiveJob 获得作业队列的可见性

使用 SideKiq 作为后端。

有没有办法通过 ActiveJob 访问 ActiveJob 的队列或 SideKiq 的队列?

文档似乎对这个问题保持沉默。

0 投票
1 回答
1299 浏览

ruby-on-rails - 有效地重新调度 ActiveJob (resque/sidekiq)

我正在Rails 4.2使用ActiveJob支持resque/sidekiq电子邮件调度的应用程序。当用户创建时事通讯活动时,会在特定日期创建并安排新工作。这一切都很好,但是当用户更改交货日期时会发生什么。

在这种情况下,每个作业都可以检查是否应该交付,因此无效的作业将被忽略,只有最后一个会被执行。这可以工作,但如果用户进行 1k 次编辑,会将 1k-1 个无效作业推入队列 - 不好。我认为应该更新现有工作或用新工作替换。据我所知,在Redis队列中搜索的job_id速度很慢。

在 Rails 中重新安排 ActiveJobs 的正确方法是什么(使用 resque/sidekiq)?

0 投票
1 回答
2392 浏览

ruby - 如何使用 ActiveJob 和 Sidekiq 限制失败的作业重试计数器?

我想限制使用作为适配器retries的作业失败的次数。ActiveJobSidekiq

使用 Sidekiq,我可以做到:

Sidekiq 配置不提供全局retry配置。每个 Worker 负责设置retry选项。所以我想我必须在 ActiveJob 端实现它才能正确完成。

0 投票
2 回答
480 浏览

ruby-on-rails - Rails 4.2 ActiveJob:每个适配器都会导致 PhusionPassenger 错误:在任何源中都找不到 [gem] (Bundler::GemNotFound)

我正在尝试使用 Rails 4.2 的 ActiveJob API 实现异步电子邮件处理。到目前为止,我已经尝试使用两个受支持的适配器:Sucker Punch 和 Delayed Job,但我都遇到了同样的问题。

事情似乎在开发中正常工作。但是,在部署到登台服务器并尝试在我的浏览器中加载网站后,我得到紫色 PhusionPassenger 错误屏幕,并显示以下错误:

以上是我尝试延迟作业时的情况。我的 gem 设置如下所示:

当我尝试 Sucker Punch 时,PhusionPassenger 错误是相同的,除了据说在任何来源中都找不到的 gem 是hitimes,它是 的依赖项celluloid,它本身是 .的依赖项sucker_punch

我最初认为问题出在 Sucker Punch 上。在我的登台服务器上安装 Hitimes gem 并仍然收到错误后,我决定切换到延迟作业,现在我遇到了几乎相同的问题,所以我猜测还有一些更底层的问题,但我是不知道它可能是什么。我也尝试在登台服务器上更新捆绑器,但没有骰子。

提前感谢您的帮助!

编辑

我在 Delayed Job github 上做了更多的探索,发现了这个命令RAILS_ENV=production bin/delayed_job restart。当我尝试在我的登台服务器上运行时,我被提醒我的目录RAILS_ENV=staging bin/delayed_job restart中没有延迟作业 binstub 。bin/回顾我的本地开发环境,我确实看到它bin/delayed_job存在并且可以bin/delayed_job restart成功运行。暂存中缺少 binstub 是否会导致问题?如果是这样,为什么没有正确创建 binstub?我很确定我的 capistrano 部署过程使用bundle exec bundle install --binstubs.

编辑 2

通过下面概述的一些步骤,我能够让延迟作业出现在我的 bin/staging 中。我还尝试根据延迟作业 GitHub 上的建议添加“守护进程”gem,但仍然遇到相同的错误,现在是关于“守护进程”而不是“延迟作业”本身。

0 投票
2 回答
1960 浏览

ruby-on-rails - 测试 Sidekiq/ActiveJob - ActiveJob 中的作业而不是 Sidekiq

我猴子修补了我的用户类(由设计支持)以使用 ActiveJob,如下所示:

我尝试使用以下测试对此进行测试:

log/test.log 看起来像这样:

调试器中的 enqueued_jobs 如下所示:

bin/rails c --环境测试

我的 Procfile 看起来像这样:

有人有想法么?

0 投票
1 回答
918 浏览

ruby-on-rails - 在 ActiveJob 中排队多个作业

我想知道是否有办法在 ActiveJob 中将多个工作排入队列?类似于 sidekiq push_bulk。

我需要将数千个工作排入队列,并且需要花费太多时间来逐一完成。

0 投票
2 回答
2363 浏览

ruby - Rails 异步作业如何让控制器知道它已完成?

我正在使用最新版本的 rails 和 ruby​​。通过一个表单,我导入了一个 CSV,然后触发了一个异步作业(我为此使用了 gem https://github.com/brandonhilkert/sucker_punch)来读取文件并处理数据。

总而言之,一切正常,但是:

我的问题是,我如何让控制器知道后台工作何时完成?我想通过快速通知重定向,但显然我不应该从模型中这样做......我可以在这里做什么?

这是我的sucker_punch 工作:

这是我的控制器操作:

0 投票
1 回答
374 浏览

ruby-on-rails - ActiveJob (resque) 使用的数据应该被持久化还是放入 ruby​​ 对象并通过对象 id 传递?

我正在使用 Twilio在 Rails 4.2 应用程序中发送/接收文本。我是批量发送,一次大约 1000 个,偶尔接收。

目前,当我收到一条文本时,我将其保存到数据库(to、from、body),然后将该记录传递给 ActiveJob 工作人员以供稍后处理。为了发送消息,我目前将 Twilio 参数保存到另一个数据库,并将该记录传递给另一个 ActiveJob 工作人员。因为我经常分批做,所以我有两个工人。第一个传出消息工作者发送一条消息。第二个查询数据库并找到应该接收消息的所有用户,为每个应该发送的消息创建一个数据库记录,然后将该记录传递给第一个传出消息工作者。所以第二个基本上只是为第一个处理创建了一堆工作。

现在,我让工作人员在完成处理(传入和传出)后销毁记录。我担心在服务器、redis 或 resque 出现故障时不会持久保存东西,但我不知道这是否真的是一个好的设计模式。有人建议我只使用香草红宝石对象并将其 id 传递给工作人员,但我不确定这如何影响数据可靠性。那么创建所有这些数据库是不是太过分了,我应该只创建香草红宝石对象并将这些对象的 ID 传递给工作人员吗?

任何和所有的见解都值得赞赏,

德鲁