在Rails环境中运行计划任务的最佳方法是什么?脚本/跑步吗?耙?我想每隔几分钟运行一次任务。


当前回答

最好的方法可能是使用rake来编写所需的任务,然后通过命令行执行它。

你可以在railscasts看到一个非常有用的视频

也可以看看其他资源:

Rails Rake教程

其他回答

使用Sidekiq或Resque是一种更加健壮的解决方案。它们都支持重试作业、使用REDIS锁的排他性、监控和调度。

请记住,Resque是一个死项目(没有积极维护),所以Sidekiq是一个更好的选择。它的性能也更高:Sidekiq在单个多线程进程上运行多个worker,而Resque在单独的进程中运行每个worker。

使用Craken(以rake为中心的cron作业)

我曾经也做过同样的决定,今天我对这个决定很满意。使用resque调度程序,因为不仅一个单独的redis会从你的数据库中取出负载,你还可以访问许多插件,如resque-web,它提供了一个伟大的用户界面。随着系统的发展,你会有越来越多的任务要安排,这样你就可以从一个地方控制它们。

在我们的项目中,我们首先使用了无论何时宝石,但遇到了一些问题。

然后我们切换到RUFUS SCHEDULER gem,它在Rails中调度任务时非常简单可靠。

我们已经使用它来发送每周和每天的邮件,甚至运行一些定期的rake任务或任何方法。

这里使用的代码是这样的:

    require 'rufus-scheduler'

    scheduler = Rufus::Scheduler.new

    scheduler.in '10d' do
      # do something in 10 days
    end

    scheduler.at '2030/12/12 23:30:00' do
      # do something at a given point in time
    end

    scheduler.every '3h' do
      # do something every 3 hours
    end

    scheduler.cron '5 0 * * *' do
      # do something every day, five minutes after midnight
      # (see "man 5 crontab" in your terminal)
    end

了解更多:https://github.com/jmettraux/rufus-scheduler

我使用脚本运行cron,这是运行cron的最好方式。 这里有一些cron的例子,

打开CronTab - > sudo CronTab -e

并粘贴波纹线:

00 00 * * * wget https://your_host/some_API_end_point

这里有一些cron格式,对你有帮助

::CRON FORMAT::

Examples Of crontab Entries
15 6 2 1 * /home/melissa/backup.sh
Run the shell script /home/melissa/backup.sh on January 2 at 6:15 A.M.

15 06 02 Jan * /home/melissa/backup.sh
Same as the above entry. Zeroes can be added at the beginning of a number for legibility, without changing their value.

0 9-18 * * * /home/carl/hourly-archive.sh
Run /home/carl/hourly-archive.sh every hour, on the hour, from 9 A.M. through 6 P.M., every day.

0 9,18 * * Mon /home/wendy/script.sh
Run /home/wendy/script.sh every Monday, at 9 A.M. and 6 P.M.

30 22 * * Mon,Tue,Wed,Thu,Fri /usr/local/bin/backup
Run /usr/local/bin/backup at 10:30 P.M., every weekday. 

希望这对你有帮助:)