Tag: 工作

按顺序运行Rails作业

我有三个Rails工作来处理足球锦标赛中的球员黄牌/红牌,以及这些球员因获得这张牌而受到的处罚。 这个想法是第一份工作收集所有的发生率(发生率是指玩家获得黄牌,举例),并计算玩家得到的所有牌。 class ProcessBookedPlayersJob < ApplicationJob queue_as :default @cards = [] def perform(*args) @cards = [] yellows = calculate_cards(1) reds = calculate_cards(2) @cards << yellows << reds end def after_perform(*match) #ProcessPenaltiesJob.perform_later @cards ProcessPenalties.perform_later @cards #PenaltiesFinalizerJob.perform_later match PenaltiesFinalizer.perform_later match end def calculate_cards(card_type) cards = Hash.new players = Player.fetch_players_with_active_incidences players.each { |p| # 1 is yellow, 2 […]

Action Job / Mailer的`deliver_now`和`deliver_later`之间的区别

在Rails中与ActionJob连接的常见模式是使用perform()方法设置Job,该方法通过perform_now或perform_later异步调用 在Mailers的特例中,您可以直接调用deliver_now或deliver_later因为ActionJob与ActionMailer很好地集成在一起。 rails文档有以下注释 – # If you want to send the email now use #deliver_now UserMailer.welcome(@user).deliver_now # If you want to send the email through Active Job use #deliver_later UserMailer.welcome(@user).deliver_later 措辞使得似乎deliver_now 不会使用ActiveJob发送邮件。 这是正确的,如果是这样, deliver_now和deliver_later之间的真正区别是什么? 一个不是异步的吗? 同样,相同的差异适用于perform_now和perform_later吗? 谢谢!

如何在特定队列中推送工作并使用sidekiq限制数字工作者?

我知道我们可以这样做: sidekiq_options queue: “Foo” 但在这种情况下,它只是一个队列中的Worker:“Foo”。 我需要在特定队列中分配一个Job(而不是Worker)。 使用Resque很容易: Resque.enqueue_to(queue_name, my_job) 此外,对于并发问题,我需要将每个队列上的Worker数量限制为1。 我怎样才能做到这一点?

多个延迟的作业流程开始相同的工作

我在运行多个工作人员的设置中使用延迟工作。 为了我的问题,它并不重要,但是假设我运行了10个工作者(目前在开发模式下这样做)。 我遇到的问题是两个不同的工作人员有时会开始在同一个工作上工作,在我的工作对象上调用perform方法。 据我所知,延迟工作使用悲观锁定来防止这种情况发生,但似乎有时候在第一个工人有时间实际锁定它之前,它仍然有足够的时间来锁定工作。 我只是想问一下是否有其他人遇到过这个问题,或者我的设置是否是行为不端。 我正在使用Postrgres,这发生在我的开发机器和Heroku上我主持它。 我将尝试在我的工作中解决它,但这种情况仍然有点问题。 理想情况下,延迟作业永远不会发生在两个进程的同一作业上。 谢谢!

什么是启动后台进程的最佳方法,可以在以后访问

我目前正在开发一个提供可执行文件的RubyGem。 可执行文件使用FSSM gem跟踪某些日志文件的状态。 这个可执行文件应该开始,在后台执行某些操作,并在以后停止。 例如: $ my_executable start # do something different… $ my_executable stop 我首先会在start方法中启动一个新进程,即查看文件。 但我不知道如何解决这个停止它的过程。 提供这种行为的最佳方式是什么? 问候