【问题标题】:Start with delayed_job从 delay_job 开始
【发布时间】:2012-07-08 15:53:27
【问题描述】:

我有一项任务需要每 10 分钟重复一次。 我想使用delayed_job,但我找不到如何正确使用它来解决我的问题的教程。例如

 class A
   def print
     p Time.now
   end
 end

我应该把这门课放在哪里? 那么我应该在哪里调用这个方法(print),所以它每 10 分钟重复一次? 它不依赖于用户,不依赖于数据库中的条目。

谢谢。

【问题讨论】:

  • 延迟作业有什么关系?

标签: ruby-on-rails delayed-job


【解决方案1】:

您的目标要求更多类似 https://github.com/javan/whenever 的东西,它基本上是基于 UNIX 系统中 crontab 文件的生成器。

【讨论】:

  • 那是delayed_job应该在有动作关联数据库的时候使用?
  • delayed_job 在您希望通过 Web 操作触发长时间运行的任务(比如说 5 分钟)时使用。 Web 操作不应花费 5 分钟来完成(因为用户会认为您的 Web 应用程序以某种方式损坏)。因此,您将作业交给了由delayed_job 创建和维护的后台进程。
【解决方案2】:

如果您希望节省资源,我会避免(即使用 rails ;因为您已使用 rails 标记了您的问题)

每当您需要做某事时加载整个 rails 环境。如果您正在运行一个简单的 ruby​​ 脚本,它会很有用。

rufus-scheduler 是要使用的 gem。

# config/initializers/chrons.rb

require 'rufus-scheduler'

scheduler = Rufus::Scheduler.new

scheduler.every '3m' do
  p Time.now  
end

如果您的工作需要很长时间才能处理(即发送电子邮件、处理图像等),此时您将需要延迟工作。

有一个著名的 gem,delayed_job_active_record 可以帮助解决这个问题,或者我最近编写的一个 gem,delayed_job_active_record_threaded,它使用线程而不是进程。这允许更快的处理,更少的资源使用和数据库访问。

【讨论】:

    猜你喜欢
    • 2013-11-09
    • 2014-05-13
    • 1970-01-01
    • 2013-01-15
    • 2011-12-04
    • 2011-05-10
    • 2021-09-02
    • 1970-01-01
    • 2013-09-08
    相关资源
    最近更新 更多