2013-04-24 2 views
3
Rails 3.2.9 
Ruby 1.9.3dev (2011-09-23 revision 33323) [i686-linux] 
sidekiq 2.10.1 

에 할당됩니다 :Sidekiq 노동자는 "기본"큐

BulkEmailWorker.perform_async 

작동하지 않습니다 (즉, 이메일을 보내지 않음).

레디 스의 데이터를 검사 난 다음 발견 :

redis 127.0.0.1:6379> keys * 
    1) "myapp:stat:processed:2013-04-24" 
    2) "myapp:queue:default" 
    3) "myapp:stat:processed" 
    4) "myapp:queues" 

    redis 127.0.0.1:6379> lrange myapp:queue:default -100 100 

    1) "{\"retry\":true,\"queue\":\"default\",\"timeout\":30,\"class\":\"Sidekiq::Extensions::DelayedMailer\",\"args\":[\"---\\n- !ruby/class 'BulkMailer'\\n- :general_mail\\n- - 1\\n\"],\"jid\":\"e46693944febf7ae26ec67a0\"}" 

레디 스 127.0.0.1:6379를>

으로는 근로자 위에 볼 수 있습니다 는 "기본"을 대기열에 할당되고 나는 때문에 추측

이 작업자는 처리 할 수 ​​없습니다. 내가

sidekiq_options(queue: :bulk_mails, backtrace: true) 

을 다음 내 노동자에서 제거하고 다음 명령을 사용하여 sidekiq 시작할 때

bundle exec sidekiq -e dev_mysql -C config/sidekiq.yml -q bulk_mails 

:

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

나는 위의 시나리오에 대해 다음 명령을 사용하여 sidekiq 시작

작동합니다 (즉, 성공적으로 이메일을 보냅니다).

난 그냥 Sidekiq을 사용하기 시작하고 내가 오해 나에 대해 알지 못하는 어떤 개념이 있다면 it.So 나와 함께 곰하시기 바랍니다에 초보자 오전 한

# https://github.com/mperham/sidekiq/wiki/Logging 
# http://stackoverflow.com/questions/15260634/sidekiq-configuration-for-multiple-environments 
--- 
    :verbose: true 
    :pidfile: ./tmp/pids/sidekiq.pid 
    :logfile: ./log/sidekiq.log 
    :concurrency: 25 

/config/sidekiq.yml.

작업자가 원하는 대기열에 할당되고 성공적으로 처리되도록 위에서 언급 한 문제를 제거해야합니다.

감사합니다, Jignesh

당신은 sidekiq.yml 설정 파일의 큐 이름과 가중치를 추가 할 수 있습니다

답변

6

:

:queues: 
- [bulk_mails, 7] 
- [default, 5] 

시작 sidekiq -C config/sidekiq.yml 옵션

. 지금 당신은 당신의 직원에 큐 이름을 참조 할 수 있습니다 :

sidekiq_options :queue => :bulk_mails 
+1

답장을 보내 주셔서 감사합니다. 저는 https://github.com/mperham/mysham/sidekiq/issues/872에서 @mperham으로부터 의견을 받았습니다. –

15

을뿐만 아니라, 당신이 Sidekiq::Client.push를 사용하는 대신 perform_async하여 원하는 큐에 작업을 밀어 수 있습니다 :

Sidekiq::Client.push({ 
    'class' => BulkEmailWorker, 
    'queue' => 'bulk_mails', 
    'args' => [ 1, 2 ] 
}) 

주를이 키 (class, queue, args) 이 기호가 아닌 문자열이어야하며 그렇지 않으면 ArgumentError: Message must include a class and set of arguments이 표시됩니다.

이것은 변수 이름 (bulk_mails.1, bulk_mails.2 등)이있는 대기열에서 작업을 푸시해야하는 경우에 특히 유용합니다. 은 하나의 작업 만 허용하여 쉽게 동시성을 제어 할 수 있습니다. 일부 대기열의 시간은 sidekiq-limit_fetch입니다.

+0

after()와 []가 공백이 없으면 좋은 코드 스타일 가이드 라인으로 간주됩니다. 그래서'[1, 2]'는'[1, 2]'이어야합니다. https://github.com/bbsosov/ruby-style-guide#no-spaces-braces –