代码之家  ›  专栏  ›  技术社区  ›  nonopolarity

Rails对cron任务的“延迟作业”是真的吗?

  •  10
  • nonopolarity  · 技术社区  · 14 年前

    延迟的作业位于 http://github.com/collectiveidea/delayed_job

    延迟的作业可以执行cron任务吗?比如每晚凌晨1点写剧本。或者每1小时运行一个脚本。

    如果不是,什么是合适的宝石可以做到这一点?是否可以使用浏览器远程监控,并记录成功和错误?

    6 回复  |  直到 7 年前
        1
  •  21
  •   marshally    14 年前

    我做过一个项目,试图用delayedjob来安排未来的项目。太糟糕了。

    相反,我建议您使用 无论何时 宝石:

    http://github.com/javan/whenever

    每当一颗红宝石 清除定义cron作业的语法。 它输出有效的cron语法并可以 甚至可以为您编写crontab文件。 它被设计成能很好地与轨道配合使用。 应用程序,可以与 卡皮斯特拉诺。只要工作顺利 独立地也是。

    代码如下(来自Github)

      every 3.hours do
        runner "MyModel.some_process"
        rake "my:rake:task"
        command "/usr/bin/my_great_command"
      end
    
      every 1.day, :at => '4:30 am' do
        runner "MyModel.task_to_run_at_four_thirty_in_the_morning"
      end
    
      every :hour do # Many shortcuts available: :hour, :day, :month, :year, :reboot
        runner "SomeModel.ladeeda"
      end
    
      every :sunday, :at => '12pm' do # Use any day of the week or :weekend, :weekday
        runner "Task.do_something_great"
      end
    

    Here 是一个关于如何使用它的RailsCast视频。

    以及相应的 ASCIICast .

        2
  •  4
  •   Dan McNevin    14 年前

    我认为cron是比延迟工作更好的工具。我以前在一个项目中使用过它,它非常擅长在后台或特定时间运行任务。但是,对于经常发生的重复任务,我认为cron是最好的工具。

    退房 whenever (及其 Railscast )为了方便地安排可以运行rake任务(或thor、shell脚本等)的cron作业,可以使用rake任务更新模型,然后使用某种类型的仪表板控制器来查看各种状态。

        3
  •  3
  •   cpuguy83    12 年前

    你也可以使用钟表宝石: https://github.com/adamwiggins/clockwork-rails-dj

    时钟工作作为一个单独的守护进程运行,可以用来触发任何类型的作业,要么添加到作业队列系统中,要么立即运行。

    使用延迟作业是为了一个可以分布在多个节点(或不分布)上的作业排队系统。 使用其他方法在正确的时间将作业添加到队列中。

    我使用rake(或runner)/cron/每当gem安排后台任务时,都会发现我的服务器负载非常高,因为在rake/runner加载到rails环境时,我会经常受到攻击。 延迟的作业工人是您的Rails守护进程,它一直在运行,因此您不会在每次需要后台任务时都不断地触发Rails。

        4
  •  2
  •   thenengah    13 年前

    无论何时工作都很好。

    我也喜欢 rufus-scheduler

    /config/initializers/task_scheduler.rb
    

    然后在那个文件中:

    scheduler = Rufus::Scheduler.start_new  
    
    scheduler.every("1m") do  
       DailyDigest.send_digest!  
    end 
    

    我最初发现这个帖子 here

    我试过了,效果很好。

    更新

    现在我回顾一下这个链接,它几乎是我唯一想为之工作的Rails公司。他们制作了许多宝石,为社区增添了如此之多。更不用说他们有一个庞大的团队!

        5
  •  2
  •   Shiko    7 年前

    我运行多个cron delayed_作业,用于夜间统计和报告生成,以及在特定时间间隔内进行数据废弃。我是这样做的:

    https://aaronvb.com/articles/recurring-delayed-job-with-cron.html

        6
  •  0
  •   jGRUBBS    10 年前

    我为这个创造了一块宝石:

    https://github.com/sellect/delayed_cron

    它与Sidekiq和Delayed_作业一起工作。希望尽快增加新的。我知道这有点晚了,但这确实是你想要的。