问题标签 [delayed-job]

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 投票
4 回答
839 浏览

delayed-job - 为什么像 stackoverflow 这样带有徽章的网站会使用某种类型的延迟作业来确定何时授予新徽章?

Stackoverflow 有一个漂亮的徽章系统。我注意到的一件事是,徽章不会立即授予,但有时在我达到标准后似乎会有某种延迟。我在其他一些也有徽章的网站上注意到了这一点。

这大概是因为他们正在使用延迟作业,该作业会定期扫描以查看是否需要授予任何新徽章。我在这里也看到了这种方法:
如何实现徽章?

但是,我真的不明白为什么这应该是必要的,并且我倾向于在我的实现中简单地拥有一个系统,在执行相关操作之后,例如发布新评论,调用 checkAwardBadge 函数,它检查是否用户满足新评论徽章的标准。

Speedwise,我认为所有相关的用户统计信息都将简单地存储在 User 的子模型中,例如 UserStats,这样就不必每次都计算评论的数量,而只是一个简单的查询。

令我震惊的是,我喜欢的系统应该是快速且易于理解的。关于为什么有必要通过延迟工作使事情复杂化,我在这里是否遗漏了一些缺点?

澄清一下:我计划有一个抽象类成就,每个实际成就都是成就的实现。每个成就都会有一个 checkAwardBadge 函数,可以从控制器调用,如果我应该选择走那条路线,甚至可以延迟工作,或者任何时候,检查用户是否获得了某个徽章。因此,成就代码将全部集中。

0 投票
2 回答
1271 浏览

ruby-on-rails - 从 capistrano 重新启动延迟作业

这是我在 enviornment.rb 中的内容。我了解由于“守护程序”gem 中的错误而重新启动存在问题,并且 ghazel-daemons 修复了它。但它不适用于我的情况。我正在使用collectiveidea 2.1.0——DJ的pre version,rails 2.3.5。

但我仍然无法从 capistrano 重新启动 delay_job。

谢谢

0 投票
1 回答
842 浏览

ruby-on-rails - 如何在测试中使 delay_job 输出静音?

我正在将延迟作业用于后台任务,例如系统电子邮件和不同的定时事件。我使用 Delayed::Worker.new.work_off 来处理我的 RSpec 测试中的事件,但随后测试输出中到处都是 sh*t,例如:

我知道输出对调试很有帮助,但是有没有办法让它静音?我宁愿在测试无法调试时启用它,而不是总是打开它。

谢谢。

0 投票
2 回答
1398 浏览

ruby-on-rails - 对延迟作业工作人员重试的更高级控制

所以我在用户创建特定模型后使用 Delayed::Job 工作人员(在 Heroku 上)作为 after_create 回调。

然而,事实证明,一个常见的用例是用户创建一些东西,然后立即删除它(可能是因为他们犯了错误或其他什么)。

当这种情况发生时,工人被解雇了,但是当他们查询手头的模型时,它已经被删除了,但是由于自动重试功能,这个命运多舛的工作将重试 25 次,并且绝对不会工作。

有什么方法可以捕获某些错误,并在它们发生时防止该特定作业再次重试,但如果不是那个错误,它将在未来重试?

0 投票
2 回答
292 浏览

ruby-on-rails - 在 Rails 中实现 Twitter OAuth Dance 的更快/更可扩展的方法?

我正在 Heroku Stack 上运行 Rails 应用程序(包括 Memcached、DJ 异步工作程序、MongoDB 持久存储)。

现在,我们使用 Twitter Oauth 作为我们网站上的唯一身份验证选项。(我们计划最终扩展到 FB 连接、OpenID 和/或电子邮件/密码)。

您可能知道,Ruby/Rails 应用程序不支持开箱即用的并发。在 Heroku 上,您可以启动额外的应用程序实例 (dynos),这会增加您的并发性(并发能力 = dynos 的数量),但每个实例的成本为 36 美元/月。

一般来说,这不是问题,因为站点上的平均请求需要 <100 毫秒。

Twitter OAuth 除外。对 Twitter 的 OAuth 相关请求平均需要大约 3,500 毫秒。

所以基本上,当任何人登录整个应用程序实例时,都会延迟 3-4 秒。

有什么体面的方法可以缓解这种情况吗?将这些动作放在异步 DJ 工作者中会不会很奇怪?它可能会使登录速度变慢一些,但至少如果一群人同时登录和/或 Twitter 非常慢,这些过程不会影响应用程序的其余部分/其他 Web 请求吗?

还有其他想法吗?

0 投票
2 回答
1656 浏览

ruby-on-rails - Rails Devise 将密码重置邮件作为延迟作业发送

我想将rails插件设计'reset_password_instructions设置为delayed_job ..但我尝试了很多方法都失败了。

我找到了一个函数 password_controller#creat :

我认为用于发送电子邮件以重置密码的句子。

我想改变它:

好的,它将返回语法错误...

帮帮我..我不知道如何解决它.. thx。

0 投票
2 回答
1748 浏览

ruby-on-rails - 终端说delayed_job开始,但什么也没做

我有一个可以在我的本地机器上完美运行的应用程序,现在正在部署它。我已经设置了所有 VPS,它也几乎可以正常工作。我的问题来自无法启动delayed_job。我在 SSHd 到应用程序时执行“ruby script/delayed_job start RAILS_ENV=production”,它返回“delayed_job:pid 11547 的进程已启动”。当我在htop中查找进程时,我找不到它。

所以我四处挖掘并读到Monit可以让delayed_job继续运行。我设置了它,希望我能以这种方式启动delayed_job。但是,没有 delay_job.pid,所以我没有走多远。不过,我最终在其中设置了 nginx 和 mysql,并希望完成延迟作业的设置。缺少delayed_job.pid 妨碍了。

当我 SSH 进入应用程序并运行“rake jobs:work RAILS_ENV=production”时,一切正常。所以我很确定应用程序本身很好。

我正在使用collectiveide 的delayed_job。谢谢你的帮助。

0 投票
1 回答
139 浏览

ruby-on-rails - 避免在 /lib 文件夹中的 delay_job 类中使用“requires”

我的/lib 文件夹中有一个类,我的delayed_job 守护程序调用它来处理Foo 类型的对象。如果我在工作类中没有“需要'foo'”,那么它不知道如何处理从数据库中获取的 YAML,我会收到“未定义的方法”错误。添加“需要'foo'”显然会解决这个问题,这是通常的解决方案。

但是..问题是我在 Foo 类中有 counter_cache=>true。因此,当 DJ 守护进程加载 Rails 环境时,会自动加载 Foo 并为我的 counter_cache 添加回调。然后,delayed_job 守护进程运行,执行“需要'foo'”,它乖乖地重新加载 Foo 并为 counter_cache 添加另一个回调,这导致我的 counter_cache 为添加或删除的每一行更新两次。

有没有办法包装 :counter_cache=>true 所以它只运行一次?有没有办法让我的 DJ 工人类使用“Foo”类型的对象而不必显式使用“requires”?

0 投票
6 回答
21317 浏览

ruby-on-rails - 让延迟的工作记录

我在 rails 日志或延迟作业日志文件中没有看到任何来自延迟作业的日志消息,我看到的唯一消息是延迟作业中的作业开始/成功/失败。日志文件。

这导致了很大的问题,包括几乎不可能检测到工作人员的错误和内存泄漏!请帮忙!

0 投票
1 回答
1918 浏览

ruby-on-rails - 内存泄漏 Rails/延迟作业

有哪些工具可用于监控从延迟作业运行的方法中的内存使用情况?

我看过 memorylogic、oink、bleakhouse,但它们似乎都设计用于与控制器一起工作,或者我遗漏了一些东西。任何有关延迟作业内存泄漏(不是 gem 本身,而是它正在运行的代码)如何被检测到的示例都将不胜感激!