Nice programing

Sidekiq가 대기열을 처리하지 않음

nicepro 2020. 12. 28. 22:31
반응형

Sidekiq가 대기열을 처리하지 않음


Sidekiq 이 대기열의 작업 처리를 방지 할 수있는 가능한 이유는 무엇입니까 ? 대기열이 가득 찼습니다. 로그 파일 sidekiq.log은 활동이 전혀 없음을 나타냅니다. 따라서 대기열은 꽉 찼지만 로그는 비어 있으며 Sidekiq은 항목을 처리하지 않는 것 같습니다. 작업을 처리하는 작업자가없는 것 같습니다. Redis를 다시 시작하거나 FLUSHALL 또는 FLUSHDB플러시하십시오 . Sidekiq는

번들 exec sidekiq -L log / sidekiq.log

다음 로그 파일을 생성합니다.

2013-05-30..Booting Sidekiq 2.12.0 using redis://localhost:6379/0 with options {}
2013-05-30..Running in ruby 1.9.3p374 (2013-01-15 revision 38858) [i686-linux]
2013-05-30..See LICENSE and the LGPL-3.0 for licensing details.
2013-05-30..Starting processing, hit Ctrl-C to stop

무엇이 잘못되었는지 어떻게 알 수 있습니까? 숨겨진 로그 파일이 있습니까?


그 이유는 바로 Sidekiq이 잘못된 대기열을 찾을 수 있다는 것입니다. 기본적으로 Sidekiq은 "default"라는 대기열을 사용합니다. 두 개의 다른 대기열 이름을 사용하고 config / sidekiq.yml에 정의했습니다.

# configuration file for Sidekiq
:queues:
  - queue_name_1
  - queue_name_2

문제는이 설정 파일이 있다는 것입니다 자동으로로드되지 않는 개발 환경 (달리 기본적으로 database.yml또는 thinking_sphinx.yml간단한에 의해 예를 들어) bundle exec sidekiq명령. 따라서 우리는 두 개의 특정 대기열에 작업을 작성했으며 Sidekiq은 세 번째 대기열 (기본 대기열)에서 작업을 기다리고있었습니다. -C또는 --config옵션을 통해 구성 파일에 대한 경로를 매개 변수로 전달해야합니다 .

bundle exec sidekiq -C ./config/sidekiq.yml

또는 대기열 이름을 직접 전달할 수 있습니다 (쉼표 뒤에 공백이 허용되지 않음).

bundle exec sidekiq -q queue_name_1,queue_name_2

문제를 찾으려면 옵션 -v이나 --verbose명령 줄에서도 전달하거나 파일 :verbose: true에서 사용 하는 것이 도움 sidekiq.yml됩니다. 설정 파일에 정의 된 모든 내용은 설정 파일이로드되지 않으면 당연히 쓸모가 없습니다. 따라서 먼저 올바른 설정 파일을 사용하고 있는지 확인하십시오.


당신이있는 경우 config/sidekiq.yml: 모든 큐가 정의되어 있는지 확인,이 샘플 파일 확인 https://github.com/mperham/sidekiq/blob/master/examples/config.yml을

명령 줄 또는 Procfile에서 대기열 이름을 전달하는 경우 다음과 유사합니다.

bin/sidekiq -q queue1 -q queue2
bundle exec sidekiq -q queue1 -q queue2

모든 큐가 거기에 정의되어 있는지 확인하십시오.

대기열 이름이 확실하지 않은 경우 다음 스크립트를 사용하여 알아낼 수 있습니다.

require "sidekiq/api"
stats = Sidekiq::Stats.new
stats.queues
# {"production_mailers"=>25, "production_default"=>1}

그런 다음 대기열로 작업을 수행 할 수 있습니다.

queue = Sidekiq::Queue.new("production_mailers")
queue.count
queue.clear

방금이 문제가 발생했습니다. 내 sidekiq.yml에서 구문 오류를 범한 것으로 밝혀졌습니다.


나는 잠시 동안 벽돌 벽에 머리를 대고 있었는데, 내 문제는 sidekiq에 새로운 버전의 redis-server가 필요하다는 것입니다. "bundle exec sidekiq"를 실행했는데 오류가 드러났습니다. 최신 버전의 redis-server로 업데이트하면 괜찮 았습니다.


제 경우에는 sidekiq이 개발 단계에서는 괜찮 았지만 준비 단계에 머물 렀습니다. 카피 스트라 노의 배치 구성에 대한 인적 오류였습니다. Capfile에서 sidekiq.yml 경로를 잘못 설정했습니다 (현재 대신 공유 됨).

조용히 실패했습니다.

# Capfile

# WRONG:
set :sidekiq_config, -> { File.join(shared_path, 'config', 'sidekiq.yml') }
                                    ^^^^^^^^^^^
# RIGHT:
set :sidekiq_config, -> { File.join(current_path, 'config', 'sidekiq.yml') }

내 문제는 내 이니셜 라이저에 configure_server가 있지만 configure_client가 아니라는 것입니다.

Sidekiq.configure_server do |config|
  config.redis = { url: ENV.fetch('SIDEKIQ_REDIS_URL', 'redis://127.0.0.1:6379/1') }
end

Sidekiq.configure_client do |config|
  config.redis = { url: ENV.fetch('SIDEKIQ_REDIS_URL', 'redis://127.0.0.1:6379/1') }
end

참조 URL : https://stackoverflow.com/questions/16835963/sidekiq-not-processing-queue

반응형