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
'Nice programing' 카테고리의 다른 글
파이썬에서 튜플을 뒤집는 방법? (0) | 2020.12.28 |
---|---|
“허가가 아닌 용서를 구하십시오”-설명 (0) | 2020.12.28 |
python과 numpy를 사용한 경사 하강 법 (0) | 2020.12.28 |
C #으로 캐리지 리턴에서 문자열을 분할하는 방법은 무엇입니까? (0) | 2020.12.28 |
Heroku vs EngineYard : 어느 것이 더 가치가 있습니까? (0) | 2020.12.28 |