Sidekiq 초기화 설정 수정

논의했던 대로 이 기능을 활용하려고 시도하고 있지만, 제가 다음과 같이 커스터마이징을 하고 있어서 막힌 부분이 있습니다:

/config/initializers/100-sidekiq.rb

제가 수정한 코드는 다음과 같습니다. 저는:

  • 각 작업(job)에 접근 가능한 재시도 횟수(retry count) 속성을 부여하고 있으며, 이 값을 플러그인에서 사용하여 작업이 몇 번 재시도되었는지에 따라 워크플로 로직을 변경하고 있습니다.

수정 중인 파일에서 저는

  • 값을 가져오기 위한 사용자 정의 미들웨어 클래스를 생성합니다.
  • 체인에 해당 클래스를 추가하여 포함되도록 합니다.
require "sidekiq/pausable"
require "sidekiq/discourse_event"
require "sidekiq_logster_reporter"
require "sidekiq_long_running_job_logger"
require "mini_scheduler_long_running_job_logger"

 module Sidekiq::Middleware::Server #<-- NEW
   class SetRetryCountMiddleware
     def call(worker, job, queue)
       worker.retry_count = job["retry_count"] if worker.respond_to?(:retry_count=)
       yield
     end
   end
 end


Sidekiq.configure_client { |config| config.redis = Discourse.sidekiq_redis_config }

Sidekiq.configure_server do |config|
  config.redis = Discourse.sidekiq_redis_config
  config[:skip_default_job_logging] = false

  config.server_middleware do |chain|
    chain.add Sidekiq::Pausable
    chain.add Sidekiq::Middleware::Server::SetRetryCountMiddleware #<-- NEW
    chain.add Sidekiq::DiscourseEvent
  end

현재 저는 app.yml에서 sed를 사용하는 파일 편집 스크립트를 통해 이를 달성하고 있습니다.

이것은 리포지토리의 위생성(hygiene)을 해치므로, 번들된 컴파일된 에셋을 사용할 수 없습니다.

플러그인에서 이러한 수정 사항을 수행하는 방법에 대한 제안이 있을까요?

스택 내의 구체적인 위치가 중요합니까? plugin.rb에서 이 코드를 시도해 봤는데, 미들웨어가 추가되는 것 같았습니다. :crossed_fingers:

class BreakEverythingMiddleware
  def call(worker, job, queue)
    puts "The middleware worked!"
    raise "THE MIDDLEWARE WORKED"
  end
end

Sidekiq.default_configuration.server_middleware { |chain| chain.add BreakEverythingMiddleware }

그렇게 하면 안 돼요!

훌륭한 제안이에요, 한번 해볼게요! 감사합니다!