【问题标题】:Is there is something like cron in rails application on windows?Windows上的rails应用程序中有类似cron的东西吗?
【发布时间】:2016-04-14 17:36:20
【问题描述】:
我正在尝试在我的应用程序中使用 cron 每周发送邮件,但我认为它不适用于 Windows。
有没有人知道在 Windows 上运行的与 cron 等效的解决方案?
【问题讨论】:
标签:
ruby-on-rails
ruby
windows
【解决方案1】:
Windows 相当于 Unix 的 cron 是“任务计划程序”。您可以在那里配置您的定期任务。
纯 Ruby 解决方案
如果您想要一个纯粹的 Ruby 解决方案,请查看:
【解决方案2】:
我建议查看Resque 和扩展名Resque-scheduler gems。您将需要一个使用bundle exec rake resque:scheduler 运行的resque 调度程序进程和至少一个使用QUEUE=* bundle exec rake resque:work 运行的工作进程。
如果您希望这些服务作为 Windows 服务在后台运行,您可以使用srvany.exe 来实现,如this SO question 中所述。
以上假设您可以安装 Redis - 一个在 Rails 社区中非常流行的键值存储,因为它可以很容易地用于支持其他 Rails 组件,例如缓存和 ActionCable,它本身就很棒许多多进程用例。
Resque 是 Redis 之上的队列系统,允许您定义可以在后台异步执行的作业。当您运行QUEUE=* bundle exec rake resque:work 时,工作进程会不断运行并轮询队列。一旦作业入队,可用的工作人员将其从队列中弹出并开始处理它。这种架构非常可扩展,因为如果您愿意,您可以让多个工作人员监听队列。
要定义工作,请执行以下操作:
class MyWeeklyEmailSenderJob
def self.perform
# Your code to send weekly emails
end
end
虽然您可以从任何地方自行将该作业排入队列(例如,从控制器作为对操作的响应),但在您的情况下,您希望它每周自动放入队列一次。这就是 Resque-scheduler 的用途。它允许您配置一个文件,例如app/config/resque_schedule.yml,您可以在其中定义哪些作业应在哪个时间间隔内排队。例如:
send_weekly_emails:
cron: 0 8 * * Mon
class: MyWeeklyEmailSenderJob
queue: email_sender_queue
description: "Send weekly emails"
请记住,必须运行调度进程才能使其与bundle exec rake resque:scheduler 一起使用。
【解决方案3】:
谢谢大家,实际上我尝试了 rufus scheduler gem,它对我有用,我想这是最好和更简单的解决方案