问题标签 [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.
ruby-on-rails-4 - 没有ActiveRecord可以使用ActiveJob吗(即我们使用MongoID)
尝试这样做,但作业在运行时失败
我正在使用 Rails 4.2,并从 application.rb 的依赖项中删除了活动记录,如下所示:
ruby-on-rails - 来自包裹一个 VPN 连接的队列的作业
我在为该问题编写代码时遇到问题。我的应用程序需要 VPN 连接才能从其他系统下载一些信息。
所以,我创建了多个作业来从另一个系统下载一些信息,每个作业都应该建立 VPN 连接,下一个下载数据,最后关闭连接。我想打包所有这些工作,即使是处理 VPN 连接的工作,也只有一个建立紧密连接的工作。
我认为我应该使用一个队列——“VPN 作业”,并将其他将在其他队列中执行的作业放在那里。
要建立 VPN 连接,我必须使用 jnc(瞻博网络连接)。我想用 ActiveJob 和 resque 运行作业。
我希望我解释它来一些可以理解的:)
更新
图像以获得更好的理解。
- VPN - 到 VPN 连接的包装器队列
- Q1、Q2、Q3 - 需要一些作业的队列 vpn 连接
ruby-on-rails - NameError:未初始化的常量 MyJob ActiveJob 和 Sidekiq
我在sidekiq/activejob
集成方面遇到问题。perform_later
我有一个从 MyJob 类调用方法的控制器。这适用于该perform
方法,但是当我更改为 时perfom_later
,该作业被安排在我的开发日志中。但是,当我看到 sidekiq 仪表板时,在重试部分,我可以看到NameError: uninitialized constant
(看下图)
这些是我的文件:
犯罪管制员
Sidekiq 初始化程序
ruby - Rails 4.2 - Sidekiq 在开发中不发送电子邮件
我有一个 Rails 应用程序,其中有一个发送大量电子邮件的方法。我想执行此操作asynchronously
。为此,我尝试使用Sidekiq
,但无法使其正常工作 - 它不发送任何电子邮件。
以前可以发送电子邮件,所以我确定我的电子邮件设置设置正确。
在我的gemfile
我有这个:
我已经跑了bundle install
。我也安装redis
了,按照RailsCasts #366上的说明进行操作。
我从sidekiq
以下命令开始:bundle exec sidekiq
,这导致如下图所示:
在application.rb
我有以下内容:
我尝试发送这样的电子邮件:
我没有收到任何错误,但电子邮件永远不会发送。
那么,我错过了什么吗?
ruby - 将成功和失败处理程序传递给 ActiveJob
我有一个 ActiveJob,它应该通过 HTTP 从外部系统加载一段数据。当该作业完成时,我想将第二个作业排入队列,该作业进行一些后处理,然后将数据提交到不同的外部系统。
我不想让第一份工作知道第二份工作,因为
- 封装
- 可重用性
- 基本上不关第一份工作的事
同样,我不希望第一份工作关心如果数据加载失败接下来会发生什么——也许用户会收到通知,也许我们在超时后重试,也许我们只是记录它并举手——再一次可能会根据异常的详细信息而有所不同,并且作业不需要包含该异常的逻辑或与其他系统的连接来处理它。
在 Java 中(这是我最有经验的地方),我可以使用 Guava 的ListenableFuture之类的东西在事后添加成功和失败回调:
不过,ActiveJob 似乎并没有提供这种外部回调机制——我可以从“Active Job Basics”中的相关 部分after_perform
了解到,并且rescue_from
只能从作业类中调用。after_peform
并不意味着区分成功和失败。
所以我能想到的最好的方法(我并不是说它非常好)是将几个 lambdas 传递给工作的perform
方法,因此:
(旁注:我不知道将 lambdas 声明为参数的 yardoc 语法是什么。这看起来是否正确,或者,如果不这样做,是否合理?)
然后,调用者必须将这些传入:
这并不可怕,至少在调用方,但它看起来很笨重,我不禁怀疑有一个我只是没有找到的常见模式。而且我有点担心,作为一个 Ruby/Rails 新手,我只是让 ActiveJob 去做一些它本来就不想做的事情。我发现的所有 ActiveJob 示例都是“一劳永逸”——异步“返回”结果似乎不是 ActiveJob 用例。
此外,我不清楚这是否适用于像 Resque 这样在单独进程中运行作业的后端。
执行此操作的“Ruby 方式”是什么?
更新:正如dre-hh 所暗示的那样,ActiveJob 在这里被证明不是正确的工具。它也是不可靠的,并且对于这种情况过于复杂。我改用Concurrent Ruby,它更适合用例,并且由于任务主要受 IO 限制,即使在 MRI 上也足够快,尽管有 GIL。
ruby-on-rails - 如何在 ActiveJob 救援中访问执行参数
我想知道您如何访问resue块中的ActiveJob执行参数,例如
谢谢你 !!
ruby-on-rails - Rails - 后台作业中的 ActionDispatch::Http::UploadedFile
我正在使用与导入 csv 和 excel Railscast类似的想法,但由于该集中的标准代码需要一些时间来处理(使用 ActiveRecord 为文件中的每一行创建新记录)我在 Heroku 上遇到超时并希望将导入过程移至后台作业。
我未能成功将文件变量(类型为 ActionDispatch::Http::UploadedFile)发送到作业,因此我发送了 file.original_filename 和 file.path 的各个变量
作业失败并出现file /var/folders/q3/xn0bp7yd2m56_4lbq0069jj80000gn/T/RackMultipart20150319-72431-1a4pnja.xlsx does not exist
我认为正在发生的错误,因为在作业开始之前文件已被删除:
上传的文件是临时文件,其生命周期是一个请求。当对象最终确定时,Ruby 会取消链接文件,因此无需使用单独的维护任务来清理它们。
ActionDispatch::Http::UploadedFile
使用 ActionDispatch::Http::UploadedFile 上传的文件不能在后台作业中使用吗?
我正在使用 Rails 4.2、ActiveJob 和 Resque
ruby-on-rails - 在 Rails 4.2 中,我在哪里将作业排入 ActiveJob?
我是 Rails 的初学者。我正在尝试遵循此示例:
它说:
“可以从任何地方将作业添加到作业队列中。我们可以通过以下方式将作业添加到队列中:ResizeImage.perform_later ' http://example.com/ex.png '”
[更新]对不起,我很愚蠢。我想出了这个任务:
但现在我这样做:
我得到:
我试过了:
但这并没有解决问题。
恐怕我不明白 Rails 中的加载是如何工作的。如何加载 ResizeImage?
ruby-on-rails - 通过 Rails 4.2 ActiveJob 向 Sidekiq 添加作业,但作业从未运行
我是新来的轨道。我正在尝试使用 Rails 4.2 和 Ruby 2.1.5 通过 Active Job 运行基本的 image_resize 作业。
我试图从这里复制代码:
我有这份工作:
我创建了这个 rake 任务:
我设置了一个充满图像的文件夹,当我运行任务时,这一行:
打印出文件夹中的所有图像。所以那部分有效。
但是工作中的任何“放置”都没有运行。我觉得它永远不会发生。
我在默认端口上运行了 redis,并且安装了 sidekiq gem。我错过了什么?
我想我想知道,我怎么知道工人是死了,还是我叫错了?我该如何调试?
[更新]好的,所以我找到了这个文件:
它充满了工作:
但我没有看到任何处理。没有工作,没有输出。我假设工作人员中的代码有问题,但是我该如何找到呢?
ruby-on-rails-4 - 通过活动作业处理依赖销毁
我有几个有很多孩子的模特。依赖破坏变得非常沉重。有人知道将依赖破坏与活跃工作联系起来的方法吗?或者,我唯一的选择是通过父模型上的回调删除依赖销毁并扮演我自己的工作吗?