【发布时间】:2018-08-01 20:53:23
【问题描述】:
我是 Ruby on Rails 的新手,我想执行一些定期任务,但我发现我不知道如何在 RoR 中设置任何 cron 任务。是否有任何基本教程如何在 RoR 中设置 cron?目前我正在 Webbrick 上使用 Windows 平台上的 Mysql DB 运行 RoR。
【问题讨论】:
标签: ruby-on-rails cron
我是 Ruby on Rails 的新手,我想执行一些定期任务,但我发现我不知道如何在 RoR 中设置任何 cron 任务。是否有任何基本教程如何在 RoR 中设置 cron?目前我正在 Webbrick 上使用 Windows 平台上的 Mysql DB 运行 RoR。
【问题讨论】:
标签: ruby-on-rails cron
有几种方法可以解决您的问题。
如果你想使用 Cron,在 Rails 中使用它的最佳方式是使用 gem whenever。要了解更多关于何时以及如何使用它的快速教程,请查看Railscast Episode 164。 Cron 最适合您需要在每个固定时间间隔运行的操作(例如清空用户的垃圾箱)
您也可以使用DelayedJob,这最适合您的某些操作持续很长时间并且您不希望用户等到他们的操作完成(例如,当您发送大量电子邮件时)或当你想在 X 小时内采取一些行动时。有关 DelayedJob 的更多信息,您可以在此处找到:https://github.com/collectiveidea/delayed_job
您还可以使用 Redis 进行 Resque:https://github.com/blog/542-introducing-resque
【讨论】:
您可以创建一个守护程序脚本,该脚本始终在内存中。
例如https://github.com/DAddYE/foreverb
【讨论】:
为了在“核心”rails/ruby 中最小化“类 cron”任务的设置,我创建了 https://github.com/Ebbe/arask
无需安装任何东西(除了 gem)或在 rails 之外设置任何东西。
将gem 'arask' 添加到您的Gemfile,运行bundle install、rails generate arask:install 和rails db:migrate。
现在您可以在文件 config/initializers/arask.rb 中设置您的任务:
arask.create task: 'send:logs', cron: '0 2 * * *' # At 02:00 every day
arask.create script: 'puts "IM ALIVE!"', interval: :daily
arask.create task: 'my:awesome_task', interval: :hourly
arask.create task: 'my:other_awesome_task', interval: 2.hours
如果服务器正在运行,任务将自动运行。
【讨论】: