【问题标题】:Is there is something like cron in rails application on windows?Windows上的rails应用程序中有类似cron的东西吗?
【发布时间】:2016-04-14 17:36:20
【问题描述】:

我正在尝试在我的应用程序中使用 cron 每周发送邮件,但我认为它不适用于 Windows。

有没有人知道在 Windows 上运行的与 cron 等效的解决方案?

【问题讨论】:

  • 在 Windows 上,您将使用 Task Scheduler。看起来它没有被积极开发,但也许 win32-taskscheduler gem 对你有任何帮助。
  • 如何使用win32-taskscheduler?

标签: ruby-on-rails ruby windows


【解决方案1】:

Windows 相当于 Unix 的 cron 是“任务计划程序”。您可以在那里配置您的定期任务。

纯 Ruby 解决方案

如果您想要一个纯粹的 Ruby 解决方案,请查看:

  • rufus-scheduler - 这是 Windows cron gem。
  • crono - 它是一个在 Rails 中的 cron 调度程序,所以它应该可以在任何地方工作。
  • Web services - 有很多免费在线服务会在特定时间段内向给定 URL 发出请求。这基本上是穷人的 cronjob。

【讨论】:

    【解决方案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,它对我有用,我想这是最好和更简单的解决方案

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-14
        相关资源
        最近更新 更多