11

我目前正在创建一个 Rails 应用程序,并想了解如何安排某些任务在特定时间运行。

例如,管理员希望在早上 8:00 向他的用户发送电子邮件,并且不想为了发送该电子邮件而早起。因此,他/她会想要安排任务在那个时候发送电子邮件。

那么,有没有一种方法,或者更好的 gem,可以让任务被安排在特定时间运行?谢谢!

4

1 回答 1

20

我在这里首选的解决方案是无论何时gem。

有了它,你就有了schedule.rb文件,它指定了什么时候应该做某些事情,包括运行 rake 任务、执行方法,甚至执行任意 shell 命令:

示例 schedule.rb 文件,厚颜无耻地从 When readme 中复制:

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

every '0 0 27-31 * *' do
  command "echo 'you can use raw cron syntax too'"
end

# run this task only on servers with the :app role in Capistrano
# see Capistrano roles section below
every :day, :at => '12:20am', :roles => [:app] do
  rake "app_server:task"
end

我将Whenever 用于许多任务,包括发送每日电子邮件。

于 2012-09-26T16:14:33.833 回答