【问题标题】:how do i set up cron jobs with rails?如何使用 Rails 设置 cron 作业?
【发布时间】:2011-03-29 23:22:33
【问题描述】:

我必须定期执行一项相当密集的数据库任务。我将rails用于与此任务相关的应用程序,因此为了方法的简单性和独特性,我想知道如何最好地使用rails实现cron作业。我知道 rake 是一种解决方案,但我完全不知道如何使用它。

谢谢。

【问题讨论】:

    标签: ruby-on-rails ruby cron rake


    【解决方案1】:

    javan-whenever 是另一个值得关注的好东西。

    http://github.com/javan/whenever

    【讨论】:

      【解决方案2】:

      rubber,一个用于云部署的 Capistrano 插件,提供了一组帮助脚本来管理 cron 作业。但是,这些脚本将完全独立于橡胶工作。

      如果您从http://github.com/wr0ngway/rubber/tree/master/lib/generators/vulcanize/templates/base/script/ 获取“cron-rake”、“cron-runner”和“cron-sh”脚本,并将它们放在 Rails 项目的 script/ 目录中,那么您应该可以开始了。不要忘记使它们可执行。

      大部分实际工作都是在“cron-sh”中完成的。 “cron-rake”是运行 rake 任务的便捷包装器。 “cron-runner”是运行任意 Ruby 的便捷包装器(很像 script/runner 提供的)。

      【讨论】:

      • 这会阻止用户访问该网址吗?
      【解决方案3】:

      只需实现您的脚本以执行您需要的任何操作,然后从 cron 作业中使用 script/runner 调用它。

      0 * * * * cd /path/to_your/app && RAILS_ENV=production script/runner scripts/my_maintenance_script.rb
      

      这将在您的生产环境中每小时启动一次my_maintenance_script.rb。相当裸机,但它可以完成工作。

      【讨论】:

      • 问题是,即使是用户也可以运行脚本...这将使服务器超载。
      【解决方案4】:

      delayed_job 很好,它将作业的详细信息存储在数据库中。

      【讨论】:

      • delayed_job 适用于在特定时间运行特定任务。不适用于重复性任务。当然,您可以在每个作业结束时安排作业的下一次运行。但是当作业失败并重新运行时,这会使事情变得混乱。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-13
      • 2015-02-10
      • 2011-08-15
      • 1970-01-01
      • 2018-08-30
      • 2012-11-12
      相关资源
      最近更新 更多