복붙노트

[REDIS] Sidekiq 처리되지 큐

REDIS

Sidekiq 처리되지 큐

Sidekiq는 큐에서 작업을 처리에서 가능한 어떤 이유를 방지 할 수 있습니까? 대기열이 가득 찼습니다. 로그 파일 sidekiq.log는 전혀 활동을 나타냅니다. 따라서 큐가 가득하지만 로그는 비어 있으며 Sidekiq 프로세스 항목에 보이지 않는다. 아무 작업자 처리 작업을 것 같다. 레디 스를 다시 시작 또는 전혀 효과로 FLUSHALL 또는 FLUSHDB로 세척합니다. Sidekiq은 시작되었다

다음과 같은 로그 파일을 생성합니다 :

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

당신은 어떻게 잘못 됐는지 알 수 있나요? 숨겨진 로그 파일이 있습니까?

해결법

  1. ==============================

    1.그 이유는 우리의 경우였다 Sidekiq 잘못된 큐 보일 수 있습니다. 기본적으로 Sidekiq은 "기본"이라는 이름의 큐를 사용합니다. 우리는 그들에 설정 / sidekiq.yml 두 개의 서로 다른 대기열 이름을 사용하고, 정의

    그 이유는 우리의 경우였다 Sidekiq 잘못된 큐 보일 수 있습니다. 기본적으로 Sidekiq은 "기본"이라는 이름의 큐를 사용합니다. 우리는 그들에 설정 / sidekiq.yml 두 개의 서로 다른 대기열 이름을 사용하고, 정의

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

    문제는이 설정 파일이 자동으로 간단한 번들 간부 sidekiq 명령으로 (예를 들어 database.yml을 또는 thinking_sphinx.yml 달리) 개발 환경에서 기본적으로로드되지 않는 것입니다. 따라서 우리는이 특정 큐에 우리의 일자리를 쓰고, Sidekiq 세 번째 큐 (기본 하나)의 작업을 위해 기다리고 있었다. 당신은 -COR --config 옵션을 통해 매개 변수로 설정 파일의 경로를 통과해야 :

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

    또는 당신이 (공백 쉼표 후 여기에 허용되지 않습니다) 직접 큐 이름을 전달할 수 있습니다 :

    bundle exec sidekiq -q queue_name_1,queue_name_2
    

    너무, 옵션 -v를 전달하거나 명령 줄에서 --verbose하는 것이 도움이된다에서 문제를 찾으려면, 또는 사용 : 자세한 : 사실을 sidekiq.yml 파일에. 설정 파일에 정의 된 모든 그러므로 당신이 먼저 올바른 설정 파일을 사용하고 있는지 .. 설정 파일이로드되지 않은 경우 물론 쓸모이다.

  2. ==============================

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

    당신이 가지고있는 경우 설정 / 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
    
  3. ==============================

    3.난 그냥이 문제를 가지고 있었다. 나는 밝혀 내 sidekiq.yml에서 구문 오류를 만들었다

    난 그냥이 문제를 가지고 있었다. 나는 밝혀 내 sidekiq.yml에서 구문 오류를 만들었다

  4. ==============================

    4.나는 잠시 동안이에 벽돌 벽에 내 머리를 두드리는했다, 내 문제는 sidekiq가 레디 스 서버의 최신 버전이 필요이었다. 나는 "번들 간부 sidekiq"실행하고 오류를 밝혔다. 내가 레디 스 서버의 최신 버전으로 업데이트하면 괜찮습니다.

    나는 잠시 동안이에 벽돌 벽에 내 머리를 두드리는했다, 내 문제는 sidekiq가 레디 스 서버의 최신 버전이 필요이었다. 나는 "번들 간부 sidekiq"실행하고 오류를 밝혔다. 내가 레디 스 서버의 최신 버전으로 업데이트하면 괜찮습니다.

  5. ==============================

    5.내 경우에는, sidekiq 개발에서 잘했지만, 준비에 갇혀. 그것은 카피 스트라 노의 배포 구성에 대한 인간의 실수였다. 내가 (대신 전류 공유)가 Capfile 잘못 sidekiq.yml의 경로를 설정합니다.

    내 경우에는, 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') }
    
  6. ==============================

    6.내 문제는 내가 configure_server 있었다하지만 내 initialiser에 configure_client하지, 당신은이 모두 있어야합니다 :

    내 문제는 내가 configure_server 있었다하지만 내 initialiser에 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
    
  7. from https://stackoverflow.com/questions/16835963/sidekiq-not-processing-queue by cc-by-sa and MIT license