【问题标题】:Dealing with very long running rake task处理运行时间很长的 rake 任务
【发布时间】:2012-04-10 06:11:31
【问题描述】:

我有兴趣运行一个运行时间很长的 rake 任务,该任务需要数小时才能完成,并且我有兴趣了解处理此问题的最佳实践。

我发现的可能解决方案:

  1. 设置 cron 作业
  2. delayed_job
  3. 回复

cron 似乎是一个简单的设置解决方案,但它是否适合非常长的任务?您使用什么以及您的解决方案的优点/缺点是什么?

【问题讨论】:

    标签: ruby-on-rails rake delayed-job rake-task


    【解决方案1】:

    我个人喜欢 Resque,您可以使用 resque-scheduler gem 来处理长时间运行或周期性的任务。

    如果您不必经常运行您的任务,您可以将 rake 任务妖魔化,以确保它在您的 SSH 会话终止或其他情况下继续运行。

    试试这样的:

    nohup rake my:task &
    

    nohup 会将输出发送到您运行任务的目录中的nohup.out,并且还会让您的 ssh 会话在进程不死的情况下退出,其次,& 会将其作为守护进程运行。

    【讨论】:

    • 这看起来可以完美地满足我的需求。在我接受其他人的观点之前,我将把这个问题保持一段时间。谢谢!
    • 没有问题!我希望你能找到你正在寻找的解决方案!找到解决方案后发布!
    【解决方案2】:

    在我创建的一个应用程序中,用户可以上传 PDF 文件,这些文件在上传时带有缩略图以创建预览图像。由于 PDF 可能非常大,缩略图可能需要一段时间并且必须在后台运行。为此,我使用了

    • Paperclip上传,
    • delayed_paperclip gem 将缩略图移交给后台进程,
    • Resque,由Redis 支持,用于处理工作队列,以及
    • God gem,用于启动 Redis 和 Resque 工作程序并监控整个 shebang。

    从好的方面来说,您可以使用漂亮的 Resque GUI 来查看您的工作人员的运行情况,并且您有上帝来监视(并杀死和重新启动)失控的进程(当您经常发生这种情况时) '正在 ImageMagick 中处理 PDF),使整个事情更加稳定和可靠。

    不利的一面是,设置它比 cron 作业要难得多。但是让 cron 在不受监控的情况下运行一个长时间的、内存密集型的进程对我来说似乎是一场灾难。

    希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-11
      • 2011-01-19
      • 1970-01-01
      • 2013-01-12
      • 1970-01-01
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多