2

user_controller.rb

class UsersController
  def create
    MyJob.perform_later
    User.create(...)
  end
end

my_job.rb

class MyJob < ActiveJob::Base
  queue_as :default

  def perform()
    puts "START"
    sleep 3
    puts "END"
  end
end

config/initializer/sucker_punch.rb

require 'sucker_punch/async_syntax'
Rails.application.configure do
  config.active_job.queue_adapter = :sucker_punch
end

Rails コンソールで実行するMyJob.perform_laterと、すべて正常に動作し、ロガーにこのメッセージが表示されますEnqueued MyJob (Job ID: 6c857af8-a8ed-4bd0-918b-4296c4315727) to SuckerPunch(default)

ただし、 http リクエストをuser_controllerに送信すると、 3 秒以内に応答が返されず (ジョブが非同期で実行されていないと思われます)、ロガーはこれを表示しますEnqueued MyJob (Job ID: e3d698eb-00d8-4849-9496-f01c53fc7217) to Inline(default)

非同期ではないコントローラーでインライン(デフォルト?)アダプターを使用しているようです。

ps : pumahttp サーバーとして使用しており、ActiveJob なしで sucker_punch を使用しても問題なく動作します

4

0 に答える 0