rake任务是否适合生产中长时间运行的流程?

时间:2013-11-28 21:17:44

标签: ruby-on-rails ruby-on-rails-4 rake-task

我正在计划使用rake任务为我的rails应用程序开发一个长时间运行的后台进程。 rake任务是否适合这种过程?理想情况下,我希望将其包装在Linux守护程序中,以便能够轻松地启动和结束该过程。

如果它不是最好的选择,哪个是替代品?我试图避免使用基于cron的解决方案,以避免担心时间表和在同一进程之间重复运行不同实例的可能性。

谢谢!

3 个答案:

答案 0 :(得分:1)

您可以使用此delayed job尝试extension

class MyJob

  include Delayed::ScheduledJob

  run_every 1.day

  def display_name
    "MyJob"
  end

  def perform
    # code to run ...
  end
end

或者使用Time.now + 5.minutes手动将另一个作业入队,例如在当前作业完成内部执行方法之后。

答案 1 :(得分:0)

你看过delayed_job宝石吗?

https://github.com/collectiveidea/delayed_job

从他们的文件:

延迟::作业(或DJ)封装了在后台异步执行较长任务的常见模式。

这是Shopify的直接提取,其中作业表负责大量核心任务。其中包括:

  • 发送大量新闻通讯
  • 图片大小调整
  • http downloads
  • 更新智能收藏
  • 在产品更改后更新我们的搜索服务器solr
  • 批量导入
  • 垃圾邮件检查

答案 2 :(得分:0)

它可能取决于您需要运行的后台作业类型。

基本上,如果你需要对用户输入的数据进行某种后处理,比如为帖子渲染图像,与第三方资源进行一些异步集成等等,那么最好使用Sidekiq(是的,它比DelayedJob更好)人们建议)

但是如果你需要按计划运行某些东西,比如说夜间下载,清理被阻止的用户和东西,然后写一个rake任务并用cron任务启动它可能是一个非常有用的选项,因为你可以使用当您需要按需运行时,来自CLI的那些任务