问题标签 [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 投票
0 回答
167 浏览

ruby-on-rails - 恭敬地使用 ActiveJob 和 Sidekiq 抓取数据

我使用 ActiveJob 和一个 Sidekiq 队列从大约 20-30 个不同的网站异步抓取数据,default.

目前,添加的工作会立即开始,并从我正在抓取的主机中敲出。我想以更尊重的方式访问这些网站,但我不确定如何配置 ActiveJob/Sidekiq。

我的想法场景将实现以下目标:

  • 针对公共来源的作业必须在背靠背作业之间等待至少 30 秒
  • 针对不同来源的作业可以并行运行
  • 应忽略对相同作业进行排队的尝试。换句话说,当尝试排队作业时,检查一个是否已经存在并且不要添加它
  • 重试作业应遵循相同的标准

谢谢!

0 投票
1 回答
763 浏览

ruby-on-rails-4 - Rails 4 ActiveJobs 使用不同的入队适配器并具有 NoMethodError

我正在尝试从控制器方法运行 ActiveJob 作业,但它失败了,我无法找到问题的正确位置:

#app/controllers/users_controller.rb

#app/jobs/policies_checks_job.rb

日志摘要:

我会很感激任何想法。

0 投票
1 回答
107 浏览

ruby-on-rails - 如何在 ActiveJob 从外部 API 检索大量数据时显示保持屏幕

我有一个应用程序使用restforce向 salesforce 发出 API 请求。

具体来说,应用程序会找到一个联系人对象,返回所有相关对象的 ID,然后根据其 ID 提取每个相关对象的完整记录。

这需要很长时间,原因有两个:

  1. 对外部 API 的请求很多,通常每个请求都需要几分之一秒的时间来回复,有些可能会有 +500 个单独的请求。
  2. 每个请求通常都会拉回大量数据。

当前所有请求都在 salesforce rest API 限制范围内,但我的开发服务器出现超时错误,因为处理其中一些请求可能需要 5 分钟以上。

Rails 4.2 - 如何最好地处理这个?

我的问题是我如何最好地让轨道来处理这个问题?

我可以从控制器(这肯定违反了瘦控制器)或视图(通过辅助方法,这似乎是一个狡猾的黑客)触发 API 请求。

理想情况下,我想让它在后台作业中运行,但我不确定我是否可以像包含辅助方法一样在作业中包含所有身份验证和其他方法?

即使我可以让它在后台工作中工作,我也不确定用户体验的最佳实践是什么。理想情况下,我想将它们路由到一个页面,告诉他们“坚持住,去喝杯咖啡”,并带有进度条,然后在请求完成后自动将它们路由到最后一页......

但我不确定如何在工作完成之前生成临时显示?

任何人都可以推荐任何可以帮助我消化这个问题的宝石或策略吗?

0 投票
2 回答
1363 浏览

ruby-on-rails - 如何设置 active_job 和救援调度程序?

我正在尝试为电子邮件通知和刮板创建后台作业。我使用 resque-scheduler (4.0.0)、resque (1.25.2) 和 rails 4.2.1。

我的 config.ru 文件:

我的 /lib/tasks/resque.rake:

我的 /config/resque_scheduler.yml:

我的 /config/initializer/active_job.rb

我的/config/initializer/resque.rb:

我的第一份电子邮件通知工作:

我计划运行的第二份工作:

所以我必须工作: 1. 电子邮件通知 - 应该在数据库中出现新记录时发送电子邮件 2. 抓取页面 - 应该每小时运行一次

我如何运行它:

运行这些命令后,我在 Resque Dashboard 中看到了两个工作人员和两个队列,正如预期的那样。

但!

在 resque Schedule 选项卡上单击“queue now”按钮后,我看到该任务已创建并写入“fs_updates”队列。但它没有运行,几秒钟后它就消失了。

当我为从 Rails 控制台发送的电子邮件运行作业时 - 它根本不起作用。

请帮我修复我的配置。谢谢!

0 投票
0 回答
116 浏览

ruby-on-rails-4 - 在自定义初始化程序中指定时,Rails ActiveJob 未使用正确的适配器

我正在尝试让 ActiveJob 在 config/initilizers/sucker_punch.rb 中使用带有以下代码的 Sucker-punch 适配器

有了这个代码,ActiveJob 仍然使用内联适配器。如果我将此代码移动到 config/application.rb 中,它就没有问题。

我可以从我的自定义初始化程序登录,所以我知道它正在被调用。

版本:

  • 鲁迪 2.2.1
  • 导轨 4.2.1
  • 吸盘拳 1.4.0

有人可以帮忙吗。

谢谢!

0 投票
1 回答
531 浏览

amazon-s3 - 在自定义 DelayedJob 中创建一个(Prawn)PDF 并将其上传到 S3?

使用:Rails 4.2、Prawn、Paperclip、通过 ActiveJobs 的 DelayedJobs、Heroku。

我有一个非常大的 PDF,需要在后台处理。在我想要创建的自定义作业中,将其上传到 S3,然后在准备好后通过电子邮件向用户发送 url。我通过 PdfUpload 模型促进了这一点。

我的方法/代码有什么问题吗?我使用 File.open() 如我发现的示例中所述,但这似乎是我错误的根源( TypeError: no implicit conversion of FlightsWithGradesReport into String )。

/pages_controller.rb

/ 工作

这会导致错误:

0 投票
1 回答
2999 浏览

ruby-on-rails - 如何在 ActiveJob 回调方法中获取 Job 属性?

Rails 4.2、active_jobs、callback_methods

在自定义 Job 的 perform 方法中,我创建了一条新记录(并将文件上传到 S3)。如何在 after_perform 回调中传递或获取新记录 ID?我想在 after_perform 发送一封电子邮件,其中包含指向 S3 文档的链接……但是,不确定如何在 after_perform 方法中获取 id。根据文档,您可以使用 job.attributes,但我得到“未定义的方法属性”。

我可以将邮件调用移动到执行方法中,但我宁愿使用回调正确处理它。我不确定如何在 perform 方法之外访问属性(或这些属性的来源)。

我试图通过将它放在回调中来做一些侦探工作(以确定回调可用的属性):

或者

或者

这些都不起作用,并且都导致未定义的“属性”。

0 投票
1 回答
235 浏览

ruby-on-rails-4 - Carrierwave+Sidekiq 动态版问题,后台重新创建

当我创建一个新设备时,新版本会添加到我的图像上传器中。然后我运行一个作业来为每个 MyModel 记录重新创建文件。Sidekiq 启动作业,但它不创建文件。我使用 ActiveJob 来声明工作。

这段代码:

Sidekiq 重启后在控制台中工作正常。我认为 Sidekiq 没有看到 MyModel 的变化。我对吗?这里有什么解决方案吗?

注意:当我直接在控制器中而不是在后台执行时,它工作正常

0 投票
1 回答
3679 浏览

ruby-on-rails - SerializationError Rails ActiveJob 时间和日期

ActiveJob::SerializationError任何人都知道在尝试序列化对象时避免发生这种情况Date的干净方法Time吗?

到目前为止,我有两个解决方案是:

  • 加载参数时调用 Marshal/JSON/YAML dump,然后load返回作业(这很糟糕,因为我需要修补邮件程序作业)
  • 猴子补丁DateTime类的:

/lib/core_ext/time.rb

/lib/core_ext/date.rb

这也很糟糕。有人有更好的解决方案吗?

0 投票
1 回答
247 浏览

ruby-on-rails - 以编程方式处理 ActiveJob 队列

使用DelayedJob,可以实例化一个工作人员以编程方式完成工作:

ActiveJob 是否提供任何接口来做同样的事情?