【问题标题】:Where to put the loop? On the rake task or on delayed job?在哪里放置循环?在 rake 任务还是延迟工作?
【发布时间】:2017-07-27 21:02:07
【问题描述】:

我想知道发送一堆电子邮件最有效的方法。

  • 我应该把循环放在 rake 任务上,延迟工作只做发送吗?

    task :publish => :environment do
      # insert loop here do
        # insert delayed job here
      end
    end
    
  • 我应该把循环放在延迟的工作中吗?

    task :publish => :environment do
      # insert delayed job here
    end
    
    # and on the job:
    def perform
      # insert loop here
    end
    

【问题讨论】:

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


    【解决方案1】:

    这取决于你有多少后台工作人员。如果您有多个工人,那么第一个选项(分别创建每个作业,在 rake 任务中使用循环)要好得多,因为它允许这些任务并行运行。

    它还使编写您的工作方法变得更容易,因为您无需担心如果工作人员碰巧跌倒或被终止,您就不必担心在整个列表中重新运行工作人员。 (尽管确保您的工人在可行的情况下是幂等的仍然是一种很好的做法!)

    【讨论】:

    • 我还有一个问题:我在 Digital Ocean 上运行我的服务器。我知道 Heroku 允许您设置工作人员的数量,但 D.O.没有,所以我不确定如何在此处设置数字。它是在 Rails 应用程序上还是在服务器配置上(我使用的是 Nginx/Puma)。如何测试请求数?
    • @Vincent:你是如何开始工作的?您可以在此处查看延迟作业文档(github.com/collectiveidea/delayed_job#running-jobs),其中显示了运行多个工作人员所需的命令行参数
    • 我正在使用 capistrano 运行命令。我想 Digital Ocean 更多的是一个问题,看看我当前的设置可以使用多少工作人员。我只是想知道如何测试它。再次感谢您的帮助!
    猜你喜欢
    • 2018-01-02
    • 2011-06-12
    • 2010-11-16
    • 2018-02-12
    • 2017-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多